zoukankan      html  css  js  c++  java
  • P1536村村通

    这是一个并查集的题,被洛谷评为提高—。

    拿到这个题便看出了这是一个裸的并查集,于是就写了一个模板,结果发现连输入都输不进去,一看竟然是多组数据,,然后看到N==0结束,于是便加了一层while。之后提交发现RE了,于是想到shh大佬曾经说RE就是递归写错了,于是仔细检查,发现真的写错了,,然后AC。

    1.并查集get_f那一段的函数要仔细写

    2.多组数据的话,单循环直接break,多循环记录一个flag,然后break

    3.多组数据就算出一组输出一组(我再去问问lz)

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define N 1000001
    using namespace std;
    int n,m;
    int ans[N];
    int f[N];
    void  init(){
        for(int i=1;i<=n;i++){
            f[i]=i;
        } 
        return;
    }
    int get_f(int v){
        if(f[v]==v) return f[v];
        else return f[v]=get_f(f[v]);
    }
    void merge(int u,int v){
        int t1=get_f(u);
        int t2=get_f(v);
        if(t1!=t2){
            f[min(t1,t2)]=t1+t2-min(t1,t2); 
        }
    } 
    int cnt=0;
    int main(){
        while(true){
            cin>>n>>m;
            if(n==0){    
                return 0;
            }
            else{
                for(int i=1;i<=n;i++){
                    f[i]=i;
                }
                cnt++;    
                for(int i=1;i<=m;i++){
                    int x,y;
                    cin>>x>>y;
                    merge(x,y);
                }
                for(int i=1;i<=n;i++){
                    if(get_f(i)==i){
                        ans[cnt]++;//有几个单独的路 
                    }
                } 
                cout<<ans[cnt]-1<<endl;
            }
        }
        return 0;
    }
    待到oi十一月,我花开后百花杀。
  • 相关阅读:
    ansible使用
    git undo last commit
    metadata简介
    tinyint(4),tinyint(80)有什么区别
    php 打印debug日志
    tinycore Network card configuration during exec bootlocal.sh
    Windows使用CMD命令查看进程和终止进程
    @NotEmpty,@NotNull和@NotBlank的区别
    spring boot 程序启动缓慢的问题(二)
    LocalDateTime的一些用法
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11241053.html
Copyright © 2011-2022 走看看