Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
最优情况有多种,输出顺序不重要吧// POJ_1033.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; int N, K; bool flag[10001] = { 0 }; bool optimal = false; void from_to(int first, int from, int to, int *task){ if(to == first){ for (int i = N; i != 0; --i){ if (!flag[i]){ cout << from << " " << i << endl; flag[i] = true; flag[from] = false; task[from] = 0; task[i] = to; break; } } } else if(flag[to]){ int temp_to = task[to]; from_to(first, to, temp_to, task); cout << from << " " << to << endl; task[from] = 0; flag[from] = false; } else{ cout << from << " " << to << endl; task[from] = 0; flag[from] = false; } } int _tmain(int argc, _TCHAR* argv[]) { cin >> N >> K; int *task = new int[N+1]; for (int i = 0; i != N + 1; ++i) task[i] = 0; int to_c = 1; for (int i = 0; i != K; ++i){ int S; cin >> S; for (int j = 0; j != S; ++j){ int c; cin >> c; flag[c] = true; task[c] = to_c; ++to_c; } } for (int i = 1; i != N + 1; ++i){ if (task[i] != 0){ if (task[i] == i) continue; else if (!flag[task[i]]){ flag[task[i]] = true; flag[i] = false; cout << i << " " << task[i] << endl; task[i] = 0; optimal = true; } else{ from_to(i, i, task[i], task); optimal = true; } } } if (!optimal) cout << "No optimization needed" << endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator