HDU 1232畅通工程

来源:互联网 发布:医院数据分析方法 编辑:程序博客网 时间:2024/06/06 02:14

畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 58396    Accepted Submission(s): 31219


Problem Description
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 
 

Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。 
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。 
 

Output
对每个测试用例,在1行里输出最少还需要建设的道路数目。 
 

Sample Input
4 21 34 33 31 21 32 35 21 23 5999 00
 

Sample Output
102998
Hint
Hint
Huge input, scanf is recommended.
#include<iostream>using namespace std;int  pre[1050];bool t[1050];               //t 用于标记独立块的根结点int Find(int x){int r=x;while(r!=pre[r])r=pre[r];int i=x,j;while(pre[i]!=r){j=pre[i];pre[i]=r;i=j;}return r;}void mix(int x,int y){int fx=Find(x),fy=Find(y);if(fx!=fy){pre[fy]=fx;}} int main(){int N,M,a,b,i,j,ans;while(scanf("%d%d",&N,&M)&&N){for(i=1;i<=N;i++)          //初始化 pre[i]=i;for(i=1;i<=M;i++)          //吸收并整理数据 {scanf("%d%d",&a,&b);mix(a,b);}memset(t,0,sizeof(t));for(i=1;i<=N;i++)          //标记根结点,从正向考虑要建造的路的数量,容易理解{t[Find(i)]=1;}for(ans=0,i=1;i<=N;i++)if(t[i])ans++;printf("%d\n",ans-1);}return 0;}#include <iostream>using namespace std;int pre[1000];int find(int x){    int r=x;    while(pre[r]!=r)        r=pre[r];    int i=x,j;    while(i!=r)    {        j=pre[i];        pre[i]=r;        i=j;    }    return r;}int main(){    int n,m;    while(cin>>n&&n)    {        int total=n-1;        for(int i=1;i<=n;i++)            pre[i]=i;        cin>>m;        while(m--)        {            int p1,p2,f1,f2;            cin>>p1>>p2;            f1=find(p1);            f2=find(p2);            //这个反向建立的不好理解啊:               //如果是不连通的,那么把这两个分支连起来               //分支的总数就减少了1,还需建的路也就减了1            if(f1!=f2)            {                total--;                pre[f1]=f2;            } //如果两点已经连通了,那么这条路只是在图上增加了一个环 //对连通性没有任何影响,无视掉        }        cout<<total<<endl;    }    return 0;}
http://blog.csdn.net/dellaserss/article/details/7724401
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 四年级的孩子作业拖拉怎么办 四年级孩子不写作业怎么办 四年级孩子不爱写作业怎么办 四年级的孩子写作业慢怎么办 四年级孩子不想写作业怎么办 四年级孩子写作业特别慢怎么办 6岁儿童睡眠少怎么办 四岁儿童睡眠少怎么办 因睡眠不足第二天没有精神怎么办 睡时间久了头疼怎么办 睡不踏实老醒怎么办 运动过后大腿肌肉酸痛怎么办 牛奶喝多了想吐怎么办 运动过度后吐了怎么办 喝酒后反胃想吐怎么办 拔牙后反胃想吐怎么办 健身完恶心想吐怎么办 锻炼后头晕想吐怎么办 高三学生睡眠不好怎么办 狗狗精力太旺盛怎么办 新入职的同事比你厉害怎么办 银子弹鞋开胶了怎么办 我很笨脑子反应慢怎么办 学车脑子不好使怎么办 生完二胎脑子不好使怎么办 羽毛球鞋买小了怎么办 羽毛球鞋买大了怎么办 感觉自己脑子越来越笨了怎么办? 生完孩子后身体素质差怎么办 胃口太好越来越胖怎么办 心情一紧张心跳手抖怎么办 消防兵新兵连俯卧撑不够怎么办 cf枪王永久禁赛怎么办 换了手机号花呗怎么办 xp系统无限重启怎么办 魔域配置资源读取错误怎么办 魔域异地交易了怎么办 魔域手游宝宝亲密度不够怎么办 魔域手游怎么改密码忘了怎么办 魔域装备注灵怎么办 lol外服账号忘记了怎么办