Team them up! UVA
来源:互联网 发布:电阻串联和并联的算法 编辑:程序博客网 时间:2024/06/05 10:35
按照紫书的思路,首先分组,然后依次“遍历”所有的分组方式(典型的空间换时间),得到最终的结果,具体实现见如下代码:
#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>using namespace std;int M,N;int edge[110][110];int color[110];int plan[110][300];struct Record{vector<int> group[2];void clear(){group[0].clear();group[1].clear();}};vector<Record> record;Record temp;bool dfs(int ind,int flag){color[ind] = flag;for (int i = 0; i < N; i++){if (i != ind){if (!(edge[ind][i] && edge[i][ind])){if (!color[i] && !dfs(i, -flag)) return false;if (color[ind] == color[i]) return false;}}}if (flag == 1) temp.group[0].push_back(ind);else temp.group[1].push_back(ind);return true;}void copyTo(vector<int>& a,vector<int>& b){for (int i = 0; i < a.size(); i++) b.push_back(a[i]);}void Print(int j){vector<int> result[2];for (int i = record.size() - 1; i >= 0; i--){int dis = record[i].group[0].size() - record[i].group[1].size();if (plan[i][j] == 1){copyTo(record[i].group[0], result[0]);copyTo(record[i].group[1], result[1]);j -= dis;}else if (plan[i][j] == -1){copyTo(record[i].group[0], result[1]);copyTo(record[i].group[1], result[0]);j += dis;}}cout << result[0].size();for (int i = 0; i < result[0].size(); i++){cout << " " << result[0][i]+1;}cout << endl;cout << result[1].size();for (int i = 0; i < result[1].size(); i++){cout << " " << result[1][i]+1;}cout << endl;}void solve(){for (int i = 0; i < record.size(); i++){int dis = record[i].group[0].size() - record[i].group[1].size();for (int j = 0; j <= 2 * N; j++){if (i == 0){plan[i][N + dis] = 1;plan[i][N - dis] = -1;break;}else{if (plan[i - 1][j]){plan[i][j + dis] = 1;plan[i][j - dis] = -1;}}}}int ind = record.size() - 1;for (int j = 0; j <= N; j++){if (plan[ind][N + j]){Print(N+j);return;}if (plan[ind][N - j]){Print(N - j);return;}}}int main(){cin >> M;while (M--){cin >> N;record.clear();memset(edge,0,sizeof(edge));memset(color, 0, sizeof(color));for (int i = 0; i < N; i++){int b;while (cin >> b&&b) edge[i][b-1] = 1;}bool feasible = true;for (int i = 0; i < N;i++){temp.clear();if (!color[i]){if (!dfs(i, 1)){feasible = false;break;}record.push_back(temp);}}memset(plan,0,sizeof(plan));if (!feasible){cout << "No solution\n";}else{solve();}if (M) cout << "\n";}return 0;}
阅读全文
0 0
- Team them up! UVA
- Team them up! UVA
- Team them up! UVA
- Uva-1627-Team them up!
- UVA 1627 Team them up!
- uva 1627 Team them up! 团队分组
- Uva-1627 Team them up!(背包变形)
- UVa-10618 Tango Tango Insurrection&& UVa-1627 Team them up!
- poj1112 Team Them Up!
- 1627 - Team them up!
- poj1112 Team Them Up!
- UVa #1627 Team them up! (例题9-19)
- uva 1627 Team them up! 二分图 + 连通分量 + 背包
- 【暑假】[深入动态规划]UVa 1627 Team them up!
- Uva 1627 Team them up!(dp+二分图染色)
- POJ 1112 Team Them Up
- [ZOJ1462][POJ1112] Team Them Up!
- poj 1112 Team Them Up!
- SD卡用arduino操作的各种方式
- Shell 命令教程(二) 进程,磁盘等操作
- 添加和删除外键约束
- 七参数计算工具教程
- 截取字符串的三种方法
- Team them up! UVA
- 无线端接口调试--重写console.log
- es进行聚合操作时提示Fielddata is disabled on text fields by default
- Java-泛型知识点整理
- 阿里云机器学习平台的思考
- 欢迎使用CSDN-markdown编辑器
- getJSON已经执行方法,但是报404
- JS获取URL中参数值(QueryString)的4种方法
- Java 随机生成中文姓名,手机号,邮编,住址