hdu4263 Kruscal
来源:互联网 发布:中信淘宝卡积分规则 编辑:程序博客网 时间:2024/04/30 14:33
就是求是否存在有k条蓝边的生成树。分别求蓝边尽量多和蓝边尽量少的情况,如果在这之间,就存在。否则,不存在。
比赛的时候想对了,关键是输入超时了,用的cin,主要是不能用%c。。。
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int mm=25000;const int mn=2500000;struct Edge{ int a,b,d; char c[5];}edge[mn];int n,m,k,num;char cc;int f[mn];bool cmp(Edge a,Edge b){ return a.d<b.d;}bool cmp1(Edge a,Edge b){ return a.d>b.d;}void Set(){ for(int i=1;i<=n;i++) f[i]=i;}int find(int x){ if(x!=f[x]) f[x]=find(f[x]); return f[x];}int main(){ int u,v,i,num1,num2,mst1,mst2,c,ret,x,y,kk; while(scanf("%d%d%d",&n,&m,&k)!=EOF) { if(n==0&&m==0&&k==0) break; for(i=0;i<m;i++) { scanf("%s",edge[i].c); scanf("%d%d",&edge[i].a,&edge[i].b); if(edge[i].c[0]=='B') edge[i].d=1; if(edge[i].c[0]=='R') edge[i].d=0; } sort(edge,edge+m,cmp); Set();kk=0;c=0; for(i=0;i<m&&c<n-1;i++) { x=find(edge[i].a); y=find(edge[i].b); if(x==y) continue; if(edge[i].c[0]=='B') f[x]=y,kk++; else f[x]=y; c++; } mst1=kk; sort(edge,edge+m,cmp1); Set();kk=0;c=0; for(i=0;i<m&&c<n-1;i++) { x=find(edge[i].a); y=find(edge[i].b); if(x==y) continue; if(edge[i].c[0]=='B') f[x]=y,kk++; else f[x]=y; c++; } mst2=kk; if(mst1<=k&&k<=mst2) printf("1\n"); else printf("0\n"); } return 0;}
- hdu4263 Kruscal
- hdu4263
- kruscal
- kruscal
- kruscal
- Kruscal
- hdu4263 Red/Blue Spanning Tree
- hdu4263 Red/Blue Spanning Tree
- poj2560 kruscal
- 【Kruscal】城市建设
- POJ2485 Kruscal
- POJ1258 Kruscal
- Kruscal算法
- 最小生成树 Kruscal
- Kruscal: Agri-Net
- kruscal 和 prim模板
- poj 1789 kruscal水题
- prim和kruscal区别
- 中国电子行业企业排名100强
- SB一样的研一生活结束有感
- 软件行业排名前100名的企业大全
- 草草草
- 几十种计算机语言简介 你知道几种?
- hdu4263 Kruscal
- poj 2230 Watchcow
- static,inline,volatile
- Hadoop初接触
- Oracle 11g asm中不同au size下datafile的au分布初探
- taskAffinity属性
- CUDA与内存池(二):内存池指针
- Oracle动态注册
- 2011—2012年度总结