hdu3635
来源:互联网 发布:四大网络交流平台 编辑:程序博客网 时间:2024/06/02 06:31
并查集,记录该记录的,并且在适时的时候修改该修改的,就可以了。
2015.10.5:
hahahah
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;#define N 10010struct node{ int cou; int fa; int sum;};node ball[N];int root(int x){ if(ball[x].fa==x){ return x; } else{ int rx=root(ball[x].fa); if(ball[x].fa!=rx){//这里要有这个判断,但是根据题意,因为根节点的sum一定是0,所以不加也行 ball[x].sum+=ball[ball[x].fa].sum; } ball[x].fa=rx; return rx; }}int main(){ int t; int n,m; char ch[10]; int a,b; scanf("%d",&t); for(int cas=1;cas<=t;cas++){ printf("Case %d:\n",cas); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ ball[i].fa=i; ball[i].sum=0; ball[i].cou=1; } for(int i=0;i<m;i++){ scanf("%s",ch); if(ch[0]=='T'){ scanf("%d%d",&a,&b); int ra=root(a); int rb=root(b); if(ra==rb){//把rb写成了ra continue; } else{ ball[ra].fa=rb; ball[rb].cou+=ball[ra].cou; ball[ra].sum++;//这句没写,导致输出的3个数中最后一个永远是0,因为忘记了val和sum的含义,可能把这道题归为权重并查集,也是因为每个点都有一个独立的移动次数需要记录吧 //printf("%dha\n",ball[2].cou); } } else if(ch[0]=='Q'){ scanf("%d",&a); int ra=root(a); //printf("%d %d\n",a,ra); printf("%d %d %d\n",ra,ball[ra].cou,ball[a].sum); } } } return 0;}
0 0
- hdu3635
- hdu3635
- hdu3635
- hdu3635
- hdu3635
- hdu3635
- hdu3635 P
- hdu3635 Dragon Balls
- hdu3635 Dragon Balls
- hdu3635(并查集)
- hdu3635 Dragon Balls
- hdu3635并查集
- hdu3635 Dragon Balls
- HDU3635 Dragon Balls
- HDU3635(并查集)
- hdu3635并查集
- hdu3635 Dragon Balls
- hdu3635之并查集
- test7.16
- 字符串反转
- uva 1001 dijkstra
- noip2010 数字统计 (统计某一数字区间中,2出现的次数)
- smali代码初识
- hdu3635
- mobile angualar ui的简单使用
- linux下的各种函数库略读(POSIX C和ANSI C、GNU C以及ISO C、glib、libc、glibc)
- 数据库JDBC的连接
- 操作系统的中断与异常(陷阱)
- 数组存储字符串
- 自学QT之键盘事件
- 32位的VS通过odbc数据源访问64位Oracle
- test7.17