zoukankan      html  css  js  c++  java
  • BZOJ 1116 [POI2008]CLO(并查集)

    题意

    Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度 (输出Yes或No)
    数据范围:2 ≤ n ≤ 100 000, 1 ≤ m ≤ 200 000

    思路

    首先我们可以推出一个性质,当且仅当某一个连通块中没有环存在输出No
    (题面一定要仔细看,看错题意连样例都看不懂)

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 const int N=200010;
     8 int n,m,fa[N],cnt[N];
     9 int find(int x){
    10     if(fa[x]==x)return x;
    11     else return fa[x]=find(fa[x]);
    12 }
    13 int main(){
    14     scanf("%d%d",&n,&m);
    15     for(int i=1;i<=n;i++){
    16         fa[i]=i;
    17     }
    18     for(int i=1;i<=m;i++){
    19         int u,v;
    20         scanf("%d%d",&u,&v);
    21         int x=find(u);
    22         int y=find(v);
    23         if(x==y){
    24             cnt[x]++;
    25         }
    26         else{
    27             fa[x]=y;
    28             cnt[y]+=cnt[x];
    29         }
    30     }
    31     for(int i=1;i<=n;i++){
    32         int f=find(i);
    33         if(cnt[f]==0){
    34             printf("NIE");
    35             return 0;
    36         }
    37     }
    38     printf("TAK");
    39     return 0;
    40 }
  • 相关阅读:
    SVG平移和缩放(鼠标滚轮)的实现
    CSS之容器水平垂直居中
    CSS之flex布局
    CSS之鼠标悬停——内容变深/变浅
    CSS之clip-path绘制多边形
    axios
    .Net 反射
    Redis
    .Net Core GRPC报错
    Python 京东云无线宝消息推送
  • 原文地址:https://www.cnblogs.com/Xu-daxia/p/9559798.html
Copyright © 2011-2022 走看看