Advertisement
yungyao

tioj 1209

Dec 19th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. using namespace std;
  2. #include <iostream>
  3. #include <vector>
  4. #define pb push_back
  5. #include <bitset>
  6. #include <utility>
  7. #define pii pair<int,int>
  8.  
  9. vector <int> graph[40040];
  10. int depth[40040];
  11. bitset <40040> visited;
  12. pii edge[500500];
  13.  
  14. void Init(int n){
  15.     visited.reset();
  16.     for (int i=0;i<=n;++i){
  17.         graph[i].clear();
  18.     }
  19. }
  20.  
  21. void dfs(int x,int dep){
  22.     visited[x] = true;
  23.     depth[x] = dep;
  24.  
  25.     for (auto i:graph[x]){
  26.         if (visited[i]){
  27.             continue;
  28.         }
  29.         dfs(i,dep+1);
  30.     }
  31. }
  32.  
  33. int main(){
  34.     ios_base::sync_with_stdio(false),cin.tie(0);
  35.     int n,m;
  36.  
  37.     while (cin >> n >> m && (n || m)){
  38.         Init(n);
  39.  
  40.         for (int i=0;i<m;++i){
  41.             int st,ed;
  42.             cin >> st >> ed;
  43.  
  44.             graph[st].pb(ed);
  45.             graph[ed].pb(st);
  46.             edge[i] = {st,ed};
  47.         }
  48.        
  49.         for (int i=1;i<=n;++i){
  50.             if (!visited[i])
  51.                 dfs(i,0);
  52.         }
  53.  
  54.         //for (int i=1;i<=n;++i)cout << depth[i] << ' '; cout << '\n';
  55.  
  56.         bool isBipartite = true;
  57.         for (int i=0;i<m;++i){
  58.             if (depth[edge[i].first] % 2 == depth[edge[i].second] % 2){
  59.                 isBipartite = false;
  60.                 break;
  61.             }
  62.         }
  63.  
  64.         cout << (isBipartite ? "Yes\n" : "No\n");
  65.     }
  66.  
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement