SSL 1255_银河英雄传说_并查集
2016-12-20 20:30
204 查看
题目大意
一开始用一字整形,然后为了战斗,就要调整队形,他可以把i行舰队的所有飞船都搞到j行去。同时他也想知道两个飞船之间有多少飞船。
如果不在同一列就输出-1.
思路
在并查集时加上一个数组记录当前数在这一列的位置和最后面的数,然后搞一下就可以了#include <stdio.h> #include <string> #define MAX 300000 int f[MAX],d[MAX],last[MAX]; int ll=0; int find(int x) { if (x!=f[x]) ll=find(f[x]); else ll=x; if (f[x]!=f[f[x]]) d[x]=d[x]+d[f[x]]; f[x]=ll; return ll; } int main() { char st[10]; int n; scanf("%d",&n); for (int i=1;i<=MAX-1;i++) { f[i]=i; last[i]=1; } for (int i=1;i<=n;i++) { int x,y; st[0]='p'; while (st[0]!='M'&&st[0]!='C') st[0]=getchar(); getchar(); scanf("%d%d",&x,&y); if (x==4&&y==9&&st[0]=='M') { int xxx=1; } int dx=find(x),dy=find(y); if (st[0]=='M') { f[dx]=dy; d[dx]=last[dy]; last[dy]=last[dx]+last[dy]; } if (st[0]=='C') { if (dx!=dy) printf("-1\n"); else { int ans=d[x]-d[y]; if (ans<0) ans=-ans; ans--; printf("%d\n",ans); } } } }
相关文章推荐
- P1196 & ssl1225-银河英雄传说【图论,并查集】
- noi2002 银河英雄传说 (并查集处理路径)
- Vijos P1443 银河英雄传说 并查集
- NOI 2002 Day1 T1 银河英雄传说【并查集】
- 银河英雄传说 洛谷1196 并查集
- 银河英雄传说 洛谷1196 并查集
- 银河英雄传说 洛谷1196 并查集
- 【codevs1540】银河英雄传说,以前屯着没做的并查集
- 问题 A: 银河英雄传说--并查集训练T2
- 银河英雄传说 洛谷1196 并查集
- 银河英雄传说 洛谷1196 并查集
- 银河英雄传说 洛谷1196 并查集
- 银河英雄传说 洛谷1196 并查集
- 银河英雄传说 洛谷1196 并查集
- 洛谷1196 银河英雄传说 并查集
- [题解] NOI2002 银河英雄传说 (并查集)
- 洛谷oj P1196 银河英雄传说 ( 并查集
- 银河英雄传说 洛谷1196 并查集
- 银河英雄传说 洛谷1196 并查集
- 洛谷 1196 [NOIP2002] 银河英雄传说 并查集