Codeforces Round #167 (Div. 2) 272E Dima and Horses
2013-02-20 15:30
162 查看
题意: 一群马,分成两组。每组中任意一头马不能有超过1只以上的敌对马和他在同一组。求合法分组。
思路: 一开始想不通怎么判断无解,2-sat貌似也不能判断这种无解情况。后来仔细分析发现,对于任一马的摆放分三种情况:
1.他有一只敌对马。那么他放哪组都行。
2.他有两只敌对马。那么这两只敌对马的摆放有2种可能,(1,1)和(2,0)((0,2)和(2,0)同属一种情况)。对于前一种他放哪组都行,后一种只能放在没冲突那组。
3.他有三只敌对马。那么三只的摆放有3种,(1,2),(2,1),(3,0)。这三种情况都存在能放他的组。
综上分析,对任一马,不论什么情况,都能找到可放置的组,所以不存在无解的情况。既然没有无解,就大胆的搜好了。。。
代码:
思路: 一开始想不通怎么判断无解,2-sat貌似也不能判断这种无解情况。后来仔细分析发现,对于任一马的摆放分三种情况:
1.他有一只敌对马。那么他放哪组都行。
2.他有两只敌对马。那么这两只敌对马的摆放有2种可能,(1,1)和(2,0)((0,2)和(2,0)同属一种情况)。对于前一种他放哪组都行,后一种只能放在没冲突那组。
3.他有三只敌对马。那么三只的摆放有3种,(1,2),(2,1),(3,0)。这三种情况都存在能放他的组。
综上分析,对任一马,不论什么情况,都能找到可放置的组,所以不存在无解的情况。既然没有无解,就大胆的搜好了。。。
代码:
#include<stdio.h> #include<vector> using namespace std; #define N 100010 vector<int> v[3*N]; int ans[3*N]; void dfs(int x) { int i,cnt=0; for(i=0;i<v[x].size();i++) if(ans[x]==ans[v[x][i]]) cnt++; if(cnt>1){ ans[x]^=1; for(i=0;i<v[x].size();i++) if(ans[x]==ans[v[x][i]]) dfs(v[x][i]); } } int main() { int i,n,m,x,y; scanf("%d%d",&n,&m); while(m--){ scanf("%d%d",&x,&y); v[x].push_back(y); v[y].push_back(x); } for(i=1;i<=n;i++) dfs(i); for(i=1;i<=n;i++) printf("%d",ans[i]); }
相关文章推荐
- CF round167 Div1 C Dima and Horses
- Codeforces Round #214 (Div. 2) C. Dima and Salad
- Codeforces Round #229 (Div. 2)B. Inna, Dima and Song
- cf 167.div2 E.Dima and Horses
- Codeforces Round #223 (Div. 2)--A. Sereja and Dima
- Codeforces Round #167 (Div. 2) D. Dima and Two Sequences 排列组合
- Codeforces Round #229 (Div. 2) B. Inna, Dima and Song
- Codeforces Round #208 (Div. 2) B. Dima and Text Messages
- CF 273C C. Dima and Horses
- Codeforces Round #208 (Div. 2) C. Dima and Containers
- Codeforces 584 D. Dima and Lisa ( Codeforces Round #324 (Div. 2))
- Codeforces #324 Div2 D.Dima and Lisa(三素数构造、哥德巴赫猜想)
- Codeforces Round #208 (Div. 2) B Dima and Text Messages
- Codeforces Round #208 (Div. 2) Problem A - Dima and Continuous Line
- Codeforces Round #324 (Div. 2) D.Dima and Lisa(哥德巴赫猜想)
- Codeforces Round #214 (Div. 2)——Dima and Salad
- Codeforces Round #208 (Div. 2) A.Dima and Continuous Line
- codeforces #262 DIV2 B题 Little Dima and Equation
- Codeforces Round #208 (Div. 2) Problem B Dima and Text Messages(简单字符串处理)
- Codeforces Round #324 (Div. 2) D. Dima and Lisa 数论 三素数定理