hdu4263
来源:互联网 发布:菲律宾禁毒知乎 编辑:程序博客网 时间:2024/05/18 00:18
生成树的问题,主要是思路转化不够,看了别人的思想把这题A了,还是得多思考,加速思想的转化。
#include<cstdio>#include<algorithm>#define maxn 100000+10using namespace std;int n,m,k;int rank_r[maxn],rank_b[maxn],par_r[maxn],par_b[maxn];void init(){ for(int i=0; i<=n; i++) { par_r[i]=par_b[i]=i; rank_r[i]=rank_b[i]=0; }}int find(int x,int color){ if(color==1) { if(x==par_r[x]) return x; return par_r[x]=find(par_r[x],1); } if(color==2) { if(x==par_b[x]) return x; return par_b[x]=find(par_b[x],2); }}void union_set(int x,int y,int color,int par[],int ran[],int &cnt){ x=find(x,color); y=find(y,color); if(x==y)return; if(ran[x]<ran[y]) { cnt++; par[x]=y; } else { cnt++; par[y]=x; if(ran[x]==ran[y])ran[x]++; }}int main(){ while(scanf("%d%d%d",&n,&m,&k),n||m||k) { int cnt_r,cnt_b; init(); cnt_r=cnt_b=0; for(int i=0; i<m; i++) { char ch = 0; while(ch!='B'&&ch!='R') ch=getchar(); int a,b; scanf("%d%d",&a,&b);// printf("%d %c\n",i,ch); if(ch=='R') { union_set(a,b,1,par_r,rank_r,cnt_r); } else { union_set(a,b,2,par_b,rank_b,cnt_b); } }// printf("cntr = %d cnt_b = %d\n",cnt_r,cnt_b); if(k>=(n-1-cnt_r)&&k<=cnt_b) printf("1\n"); else printf("0\n"); } return 0;}
0 0
- hdu4263
- hdu4263 Kruscal
- hdu4263 Red/Blue Spanning Tree
- hdu4263 Red/Blue Spanning Tree
- Android 从小白到大拿之路——Intent学习
- ADSL拨号上网
- OC方法和函数的区别
- file_get_contents 无法读取https的问题解决!
- 分治法实现循环赛事日程问题
- hdu4263
- Hadoop——上传本地文件到hdfs
- Java中内存,成员变量,局部变量
- 第四周 项目2-分数类雏形
- 约瑟夫问题 The Josephus Problem 非递归算法求解
- 整数划分问题
- 蓝桥杯 C本科B组 调和级数无限逼近
- (others)PPOE的疑惑
- Why do they choose the film faced plywood