南邮 OJ 1584 连通 OR 不连通
来源:互联网 发布:淘宝男皮鞋 编辑:程序博客网 时间:2024/06/08 11:41
连通 OR 不连通
时间限制(普通/Java) : 2000 MS/ 6000 MS 运行内存限制 : 65536 KByte
总提交 : 81 测试通过 : 25
总提交 : 81 测试通过 : 25
比赛描述
给定一个无向图,一共n个点,请编写一个程序实现两种操作:
D x y 从原图中删除连接x,y节点的边。
Q x y 询问x,y节点是否连通
D x y 从原图中删除连接x,y节点的边。
Q x y 询问x,y节点是否连通
输入
第一行两个数n,m(5<=n,m<=100000)
接下来m行,每行一对整数 x y (x,y<=n),表示x,y之间有边相连。保证没有重复的边。
接下来一行一个整数 q(q<=100000)
以下q行每行一种操作,保证不会有非法删除。
输出
按询问次序输出所有Q操作的回答,连通的回答C,不连通的回答D
样例输入
3 3
1 2
1 3
2 3
5
Q 1 2
D 1 2
Q 1 2
D 3 2
Q 1 2
样例输出
C
C
D
提示
题目来源
/* AC 241MS#include<iostream>#include<set>using namespace std;#define N 100001int f[N];struct conet{int x,y;}c[N],d[N];bool operator<(const conet &c1,const conet &c2){return c1.x==c2.x ? c1.y<c2.y : c1.x<c2.x;}char op[N],r[N];void init(int n){int i;for(i=1;i<=n;i++){f[i] = i;}}int father(int i){return f[i]==i ? i : f[i]=father(f[i]);}void connect(int i,int j){int fi,fj;fi = father(i);fj = father(j);if(fi != fj){f[fj] = fi;}}int main(){int n,m,i,q;set<conet> cs;scanf("%d%d",&n,&m);init(n);for(i=0;i<m;i++){scanf("%d%d",&c[i].x,&c[i].y);if(c[i].x > c[i].y){swap(c[i].x,c[i].y);}}scanf("%d",&q);for(i=0;i<q;i++){getchar();scanf("%c%d%d",op+i,&d[i].x,&d[i].y);if(d[i].x >d[i].y){swap(d[i].x,d[i].y);}if('D'==op[i]){cs.insert(d[i]);}}for(i=0;i<m;i++){if(!cs.count(c[i])){connect(c[i].x,c[i].y);}}int rNo=0;for(i=q-1;i>=0;i--){if('Q'==op[i]){if(father(d[i].x)==father(d[i].y)){r[rNo++]='C';}else{r[rNo++]='D';}}else{connect(d[i].x,d[i].y);}}for(i=rNo-1;i>=0;i--){printf("%c\n",r[i]);}}*//*#include<iostream>#define N 100001int f[N];bool flag[1000000];//Memory Limit Exceedstruct conet{int x,y;}c[N],d[N];bool operator<(const conet &c1,const conet &c2){return c1.x==c2.x ? c1.y<c2.y : c1.x<c2.x;}char op[N],r[N];void init(int n){int i;for(i=1;i<=n;i++){f[i] = i;}}int father(int i){return f[i]==i ? i : f[i]=father(f[i]);}void connect(int i,int j){int fi,fj;fi = father(i);fj = father(j);if(fi != fj){f[fj] = fi;}}int getNum(){int t, res;while((t = getchar()) < '0' || t >'9');res = t - '0';while((t = getchar()) >= '0' && t <= '9'){res = res * 10 + t - '0';}return res;}int main(){int n,m,i,q;//scanf("%d%d",&n,&m);n = getNum();m = getNum();init(n);for(i=0;i<m;i++){//scanf("%d%d",&c[i].x,&c[i].y);c[i].x = getNum();c[i].y = getNum();if(c[i].x > c[i].y){std::swap(c[i].x,c[i].y);}}//scanf("%d",&q);q = getNum();for(i=0;i<q;i++){//getchar();//scanf("%c%d%d",op+i,&d[i].x,&d[i].y);op[i] = getchar();d[i].x = getNum();d[i].y = getNum();if(d[i].x >d[i].y){std::swap(d[i].x,d[i].y);}if('D'==op[i]){flag[d[i].x*N+d[i].y] = 1;}}for(i=0;i<m;i++){if(!flag[c[i].x*N+c[i].y]){connect(c[i].x,c[i].y);}}int rNo=0;for(i=q-1;i>=0;i--){if('Q'==op[i]){if(father(d[i].x)==father(d[i].y)){r[rNo++]='C';}else{r[rNo++]='D';}}else{connect(d[i].x,d[i].y);}}for(i=rNo-1;i>=0;i--){printf("%c\n",r[i]);}}*/#include<iostream>#include<set>using namespace std;#define N 100001int f[N];struct conet{int x,y;}c[N],d[N];bool operator<(const conet &c1,const conet &c2){return c1.x==c2.x ? c1.y<c2.y : c1.x<c2.x;}char op[N],r[N];void init(int n){int i;for(i=1;i<=n;i++){f[i] = i;}}int father(int i){return f[i]==i ? i : f[i]=father(f[i]);}void connect(int i,int j){int fi,fj;fi = father(i);fj = father(j);if(fi != fj){f[fj] = fi;}}int getNum(){int t, res;while((t = getchar()) < '0' || t >'9');res = t - '0';while((t = getchar()) >= '0' && t <= '9'){res = res * 10 + t - '0';}return res;}int main(){int n,m,i,q;set<conet> cs;//scanf("%d%d",&n,&m);n = getNum();m = getNum();init(n);for(i=0;i<m;i++){//scanf("%d%d",&c[i].x,&c[i].y);c[i].x = getNum();c[i].y = getNum();if(c[i].x > c[i].y){swap(c[i].x,c[i].y);}}//scanf("%d",&q);q = getNum();for(i=0;i<q;i++){//getchar();//scanf("%c%d%d",op+i,&d[i].x,&d[i].y);op[i] = getchar();d[i].x = getNum();d[i].y = getNum();if(d[i].x >d[i].y){swap(d[i].x,d[i].y);}if('D'==op[i]){cs.insert(d[i]);}}for(i=0;i<m;i++){if(!cs.count(c[i])){connect(c[i].x,c[i].y);}}int rNo=0;for(i=q-1;i>=0;i--){if('Q'==op[i]){if(father(d[i].x)==father(d[i].y)){r[rNo++]='C';}else{r[rNo++]='D';}}else{connect(d[i].x,d[i].y);}}for(i=rNo-1;i>=0;i--){printf("%c\n",r[i]);}}
0 0
- 关于看第三方文档,七牛NoClassDefFoundError错误
- Hardware-javaaplication.
- Android ViewGroup点击效果(背景色)
- noip1996 乘法运算 - 普及组 (模拟)
- POJ3667-Hotel-线段树区间合并(模板)
- 南邮 OJ 1584 连通 OR 不连通
- mysql中select distinct的用法
- iOS开发:开发中如何更改项目名
- MS SQL Server之光标、存储过程和触发器
- c++中的map用法详解
- 悬崖勒马之三年编码的反省
- C语言字符串处理函数
- opencv学习(六)书本《学习Opencv》(中文版)第四章的作业答案第二题(opencv3.0.0+VS2012+win7)
- android实现类似toast效果的圆角dialog警告框