zoukankan      html  css  js  c++  java
  • [BZOJ1116]CLO[并查集]

    看了样例突然发现= =无向边不会增加入度。

    然后发现是环套环。

    一个环所有点入度都为2。

    最后的图无视所有无向边的话大概是这样的(将就一下

    然后就可以并查集维护一下联通性...

    当x , y属于一个联通块(假设是一条链),那么这条链中的每一个点都能作为根节点$root$。因为n个节点的链n-1条边只有root是入度为0的。

    否则,对合并后的块(假设y所在的块并入x所在的块),对x的块打标机。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 inline ll _() {
     5     ll x=0,f=1; char ch=getchar();
     6     for(;ch<'0'||ch>'9';ch=getchar())
     7         if(ch=='-')f=-f;
     8     for(;ch>='0'&&ch<='9';ch=getchar())
     9         x=x*10+ch-'0';
    10     return x*f;
    11 }
    12 #define _ _()
    13 const int N=1e5+5;
    14 int f[N],vis[N];
    15 inline int find( int x ) { return f[x]==x?x:f[x]=find(f[x]); }
    16 int main() {
    17     int n=_,m=_;
    18     for(int i=1;i<=n;i++) f[i]=i,vis[i]=0;
    19     for(int i=1,x,y;i<=m;i++) {
    20         x=find(_); y=find(_);
    21         if(x==y) vis[x]=1;
    22         else { f[y]=x; vis[x]=vis[x]|vis[y]; }
    23     } 
    24     for(int i=1;i<=n;i++) if(!vis[find(i)]) return puts("NIE"),0;
    25     puts("TAK");
    26 }
    View Code
  • 相关阅读:
    hdu 4685(强连通分量+二分图的完美匹配)
    图的连通性问题
    poj 1904(强连通分量+完美匹配)
    poj 2186 "Popular Cows"(强连通分量入门题)
    poj 1236(强连通分量分解模板题)
    EOJ2018.10 月赛
    21.Merge Two Sorted Lists
    20.Valid Parentheses
    19.Remove Nth Node From End of List
    18.4Sum
  • 原文地址:https://www.cnblogs.com/ZincSabian/p/10099480.html
Copyright © 2011-2022 走看看