poj之旅——2236,1703
2016-05-27 12:36
253 查看
题目描述:有N台电脑坏了,它们原本组成这样一个局域网:距离d内的两台电脑互联。现在通过修理和查看操作,求查看时两台电脑是否互联
题目描述:有N名来自两个帮派的坏蛋,已知一些坏蛋两两不属于同一帮派,求判断给定两个坏蛋是否属于同一帮派
题解:并查集的基本应用,直接看程序。
参考程序:
2236:
1703:
题目描述:有N名来自两个帮派的坏蛋,已知一些坏蛋两两不属于同一帮派,求判断给定两个坏蛋是否属于同一帮派
题解:并查集的基本应用,直接看程序。
参考程序:
2236:
#include<cstdio> #include<cmath> #include<algorithm> #include<iostream> using namespace std; int f[2000]; int x[2000],y[2000]; int n,d; bool have[2000]; int find(int x){ if (f[x] != x)f[x]=find(f[x]); return f[x]; } void unite(int x,int y){ x=find(x);y=find(y); if (x != y) f[y]=x; } bool same(int x,int y){ x=find(x);y=find(y); return x==y; } int sqr(int x){ return x*x; } int main(){ scanf("%d %d",&n,&d); for (int i=0;i<n;i++)scanf("%d %d",&x[i],&y[i]); char now; for (int i=0;i<n;i++)f[i]=i; while (cin>>now){ if (now=='O'){ int id; cin>>id; id--;have[id]=true; for (int i=0;i<n;i++) if (i != id) if (have[i] && sqr(x[i]-x[id])+sqr(y[i]-y[id])<=d*d)unite(i,id); }else{ int id1,id2; cin>>id1>>id2; id1--;id2--; if (same(id1,id2))printf("SUCCESS\n"); else printf("FAIL\n"); } } return 0; }
1703:
#include<cstdio> #include<algorithm> #include<cstring> #define maxn 1000000 using namespace std; int op[maxn]; int f[maxn]; int find(int x){ return f[x]=f[x]==x?x:find(f[x]); } void unite(int x,int y){ int a=find(x),b=find(y); f[b]=a; } int main(){ int T; scanf("%d",&T);getchar(); while (T--){ int n,m; scanf("%d %d",&n,&m); for (int i=1;i<=n;i++)f[i]=i; memset(op,0,sizeof(op)); for (int i=0;i<m;i++){ int x,y;char cmd=getchar(); scanf("%c %d %d",&cmd,&x,&y);//经检验可用scanf("\n%c%d%d",&cmd,&x,&y);无需getchar if (cmd=='D'){ if (op[x]+op[y]==0){op[x]=y;op[y]=x;}else{ if (op[x]==0)op[x]=y; if (op[y]==0)op[y]=x; unite(op[x],y); unite(op[y],x); } }else if (n==2)printf("In different gangs.");else{ int a=find(x),b=find(y),c=find(op[x]); if (a==b)printf("In the same gang."); else if (b==c)printf("In different gangs."); else printf("Not sure yet."); printf("\n"); } } } return 0; }
相关文章推荐
- sprint演示
- LeetCode01 Two Sum
- 构件图和部署图--trufun UML2推荐
- 博客搬家
- 递归转非递归几个实例
- 一般函数指针和类的成员函数指针
- Google浏览器Chrome安装失败,错误代码0xa0430721解决办法
- Android studio常见操作
- XREF
- myeclipse,eclipse,java项目中如何隐藏文件夹,如何显示文件夹
- 用栈将递归转换成非递归
- JFinal record类型数据在前台获取
- sybase存储过程,插入百万数据
- poj之旅——2010(队列)
- json 理解,添加 删除 排序
- 16. php数据库抽象层PDO(五)
- 一个项目 接口编写需要注意的地方
- 奇偶数排序(调序)
- 133. Clone Graph【M】【73】【图的遍历】【再来一遍】【vip】
- 摘要:我们经常会用到递归函数,但是如果递归深度太大时,往往导致栈溢出。而递归深度往往不太容易把握,所以比较安全一点的做法就是:用循环代替递归。文章最后的原文里面讲了如何用10步实现这个过程,相当精彩。本文翻译了这篇文章,并加了自己的一点注释和理解。