Lightoj 1009
来源:互联网 发布:小米wifi无法加入网络 编辑:程序博客网 时间:2024/06/08 18:04
题意: 两方战争,求可能最大的一方军队人数。
思路: 看了一下别人的代码,是用二分图染色写的。
AC代码:
//Lightoj 1009#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <cmath>#include <queue>#include <stack>#include <map>#include <set>#define ll long long#define llu unsigned long long#define INF 0x3f3f3fusing namespace std;const int maxn=20010;vector<int>g[maxn],v[maxn];int vis[maxn];int color[maxn];int cnt;void init() { cnt=0; for(int i=1; i<=maxn; i++) { vis[i]=0; color[i]=0; g[i].clear(); v[i].clear(); }}void dfs(int x,int r) { int s=g[x].size(); for(int i=0; i<s; i++) { int t=g[x][i]; if(vis[t] && !color[t]) { v[cnt].push_back(t); color[t]=3-r; dfs(t, color[t]); } }}int main(){ int t; int n; scanf("%d",&t); for(int cas=1; cas<=t; cas++) { init(); int Max=-1; scanf("%d",&n); for(int i=1; i<=n; i++) { int u,v; scanf("%d%d",&u,&v); Max=max(Max,max(v,u)); vis[u]=1; vis[v]=1; g[u].push_back(v); g[v].push_back(u); } for(int i=1; i<=Max; i++) { if(vis[i] && !color[i]) { cnt++; v[cnt].push_back(i); color[i]=1; dfs(i,1); } } int ans=0; for(int i=1; i<=cnt; i++) { int c1=0,c2=0; for(int j=0; j<v[i].size(); j++) { if(color[v[i][j]]==1) c1++; if(color[v[i][j]]==2) c2++; } ans+=max(c1,c2); } printf("Case %d: %d\n",cas,ans); } return 0;}
0 0
- Lightoj 1009
- Lightoj 1009 BFS
- lightoj 1009 二分染色
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- [LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- 离暑假还有一个月
- static 关键字的用法(c语言)
- SQL Server常用管理命令
- SQL限定查询
- c语言学习笔记25之指针1
- Lightoj 1009
- 对java set集合的理解与学习
- Running Android apps using Docker and ARC Welder
- 高通8X16电池BMS算法(二)
- try catch 语句好不好?
- 数据模型是对象时如何利用freemarker生成静态文件
- opencv第三课------------AVI注意问题
- 获取系统的联系人
- tt