hdu3635
2015-09-25 20:53
387 查看
并查集,记录该记录的,并且在适时的时候修改该修改的,就可以了。
2015.10.5:
hahahah
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define N 10010
struct node{
int cou;
int fa;
int sum;
};
node ball
;
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;
}
2015.10.5:
hahahah
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define N 10010
struct node{
int cou;
int fa;
int sum;
};
node ball
;
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;
}
相关文章推荐
- smali代码初识
- uva 1001 dijkstra
- hbase ganglia监控配置
- freemarker定义自己的标签错误(八)
- hdu3635
- 我要上蓝翔
- [linux]windows通过VNC连接到ubuntu后输入没有显示--切换输入法
- 字符串反转
- 字节对齐&&sizeof
- test7.16
- Python实现读写文件
- Xcode断点 中断不正常 每次断点都进入汇编
- android 图片的加载保存 与 二级缓存
- C++读取csv文件并以map进行存储
- Metronic 使用到的开源插件汇总
- Asp.Net获取IP的方法
- poj 1734 Sightseeing trip判断最短长度的环
- Github入门
- 【Xcode7 使用NSURLSession发送HTTP请求出错 】
- UVA - 1587 Box