codeforces 791B Bear and Friendship Condition

题目链接:http://codeforces.com/contest/791/problem/B

题意:n个人,共有m对关系。如果x和y有关系,y和z有关系,只有x和y有关系的时候才认为这样是合法的。现在问你输入是否合法。

分析:我是dfs做的,将每对关系存入vector,然后数组记录每一个人他一共有多少关系,然后dfs他,看和他有关系的人是不是关系数也和他一样。一旦有不一样的,就输出"NO".

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int a[150005];
 5 vector<int>g[150005];
 6 int vis[150005];
 7 int p=0,number;
 8 void dfs(int x){
 9     int d=g[x].size();
10     if(p==1) return;
11     vis[x]=1;
12     number++;
13     for(int i=0;i<d;i++){
14         if(vis[g[x][i]]==0) {
15             if(a[g[x][i]]!=a[x]){
16                 p=1;
17                 break;
18             }
19             dfs(g[x][i]);
20         }
21     }
22 }
23 int main() {
24     ios_base::sync_with_stdio(0);
25     cin.tie(0);
26     int n,m;
27     memset(a,0,sizeof(a));
28     cin>>n>>m;
29     int x,y;
30     for(int i=1;i<=m;i++){
31         cin>>x>>y;
32         g[x].push_back(y);
33         g[y].push_back(x);
34         a[x]++;
35         a[y]++;
36     }
37     memset(vis,0,sizeof(vis));
38     for(int i=1;i<=n;i++){
39         number=0;
40         if(vis[i]==0) {
41             dfs(i);
42             if(p==1||number!=a[i]+1) {p=1;break;}
43         }
44     }
45     if(p==0) cout<<"YES"<<endl;
46     else cout<<"NO"<<endl;
47 
48 return 0;
49 }
View Code

 

posted @ 2017-06-04 23:49  BadboyQAQ  阅读(154)  评论(0编辑  收藏  举报