zoukankan      html  css  js  c++  java
  • NOI2015程序自动分析 并查集

    有10^9个点,每次给出两个点的关系:权相等或不等,问最后能不能成立

    感觉一开始在撕烤一个动态的问题,,,想写一个带权的并查集

    结果发现静态询问,那就sb乱搞,懒得手写离散就直接map(卧槽好多细节忘考虑)

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int T,n,N,Nm,x,y,e;
     4 map<int,int> o;
     5 int fa[500001],X[500001],Y[500001];
     6 int getfa(int x)
     7 {
     8     if(fa[x]==x) return x;
     9     else return fa[x]=getfa(fa[x]);
    10 }
    11 int main()
    12 {
    13     for(scanf("%d",&T);T;T--)
    14     {
    15         scanf("%d",&n);Nm=0;N=0;o.clear();
    16         for(int i=1;i<=2*n;i++)
    17             fa[i]=i;
    18         bool over=0;
    19         for(int i=1;i<=n;i++)
    20         {
    21             scanf("%d%d%d",&x,&y,&e);
    22             if(over) continue;
    23             if(x==y)
    24             {
    25                 if(e==0)
    26                 {
    27                     over=1;
    28                     puts("NO");
    29                 }
    30                 else
    31                     continue;
    32             }
    33             int Xx=o[x],Yx=o[y];
    34             if(!Xx)o[x]=++Nm,x=Nm;else x=Xx;
    35             if(!Yx)o[y]=++Nm,y=Nm;else y=Yx;
    36             if(e)
    37                 fa[getfa(x)]=getfa(y);
    38             else
    39                 X[++N]=x,Y[N]=y;
    40         }
    41         if(over) continue;
    42         bool flag=0;
    43         for(int i=1;i<=N;i++)
    44             if(getfa(X[i])==getfa(Y[i]))
    45                 flag=1;
    46         puts(flag?"NO":"YES"); 
    47     }
    48     return 0;
    49 } 
  • 相关阅读:
    Android 基础-2.0 拔打电话号码
    Android 基础-1.0 按钮4种点击事件
    Android Studio 技巧备忘
    Android Studio Mac版快捷键
    face++静态库转为动态库之二
    Podfile语法参考
    iOS 高级去水印,涂鸦去水印
    vector 用法小例子
    UltraCompare 激活
    linux 日志查询
  • 原文地址:https://www.cnblogs.com/wanglichao/p/6839145.html
Copyright © 2011-2022 走看看