全部评论 1

  • #include<bits/stdc++.h>
    #include <fstream>
    #define cout std::cout
    #define cin std::cin
    #define sort std::sort
    #define ifstream std::ifstream
    #define vector std::vector
    #define ll long long
    #define inf 0x3f3f3f3f3f3f3f3f
    int fa[222222];
    int find(int x){if(fa[x]==x)return x;else return fa[x]=find(fa[x]);}
    void ma(int x,int z){fa[find(x)]=find(z);}
    void ad(int x){int i=0;while(++i<=x)fa[i]=i;}
    int main(){
        int n,m,cnt=0;
        cin>>n>>m;
        ad(n*3);
        while(m--){
            int x,y,z;
            cin>>z>>x>>y;
            if((y>n||x>n)||(y==x&&z==2))cnt++;
            else if(z==1){
                //x=>x`=>x``=>x
                if(find(x)==find(y+n)|find(x+n)==find(y)){
                    cnt++;
                    continue;
                }
                ma(x,y);
                ma(x+n,y+n);
                ma(x+n*2,y+n*2);
            }else {
                //x=>x`=>x``=>x
                if(find(x)==find(y)||find(x)==find(y+n)){
                    cnt++;
                    continue;
                }
                ma(x,y+n*2);
                ma(x+n,y);
                ma(x+n*2,y+n);
            }
        }cout<<cnt;
    }
    

    2026-09-19 来自 浙江

    1
    • #include<bits/stdc++.h>
      using namespace std ;
      #define int long long
      #define pll pair<long long , long long>
      const long long Inf = 0x3f3f3f3f ;
      const long long mod = 1e9 + 7 ;
      int n , k , fa[1000010] , cnt ;
      int find (int x){
          if(fa[x] == x)return x ;
          else {
              return fa[x] = find(fa[x]) ;
          }
      }
      void merge (int x , int y){
          int x1 = find(x) ;
          int y1 = find(y) ;
          fa[x1] = y1 ;
          return ;
      }
      signed main(){
          // freopen(".in" , "r" , stdin) ;
          // freopen(".out" , "w" , stdout) ;
          // --------------------------------------------------
          ios::sync_with_stdio(false) ;
          cin.tie(nullptr) ;
          cout.tie(nullptr) ;
          cin >> n >> k ;
          for(int i = 1 ; i <= 3 * n ; i ++){
              fa[i] = i ;
          }
          for(int i = 1 ; i <= k ; i ++){
              int u , x , y ;
              cin >> u >> x >> y ;
              if(x > n || y > n)cnt ++ ;
              else if(u == 1){
                  if(find(x) == find(y + n) || find(y) == find(x + n))cnt ++ ;
                  else {
                      merge(x , y) ;
                      merge(x + n , y + n) ;
                      merge(x + 2 * n , y + 2 * n) ;
                  }
              } else {
                  if(find(x) == find(y) || find(y) == find(x + 2 * n))cnt ++ ;
                  else {
                      merge(x + n , y) ;
                      merge(x + 2 * n , y + n) ;
                      merge(x , y + 2 * n) ;
                  }
              }
          }
          cout << cnt << endl ;
          // --------------------------------------------------
          // fclose(stdin) ;
          // fclose(stdout) ;
          return 0 ;
      }
      

      欣赏一下

      2026-09-25 来自 浙江

      0
暂无数据

提交答案之后,这里将显示提交结果~

首页