SSL 1255_银河英雄传说_并查集
来源:互联网 发布:高帮女帆布鞋知乎 编辑:程序博客网 时间:2024/04/28 14:00
题目大意
一开始用一字整形,然后为了战斗,就要调整队形,他可以把i行舰队的所有飞船都搞到j行去。
同时他也想知道两个飞船之间有多少飞船。
如果不在同一列就输出-1.
思路
在并查集时加上一个数组记录当前数在这一列的位置和最后面的数,然后搞一下就可以了
#include <stdio.h>#include <string>#define MAX 300000int 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); } } }}
1 0
- SSL 1255_银河英雄传说_并查集
- 银河英雄传说(并查集)
- 1540银河英雄传说{并查集}
- 【NOI2002T1】银河英雄传说-并查集
- 银河英雄传说(并查集)
- 【并查集】银河英雄传说
- NOI2002 银河英雄传说(并查集)
- [并查集]银河英雄传说
- NOI2002银河英雄传说 并查集
- [并查集]银河英雄传说
- Vijos P1443 银河英雄传说 并查集
- Noi2002 银河英雄传说(并查集)
- [NOI2002]银河英雄传说(并查集)
- noi2002 银河英雄传说 (并查集处理路径)
- 【codevs1540】银河英雄传说,以前屯着没做的并查集
- 银河英雄传说 VIJOS 1443 并查集
- NOI2002银河英雄传说(带边权的并查集)
- 洛谷1196 银河英雄传说(并查集)
- Android使用TelephonyManager
- jQuery事件(常见事件的总结)
- ubuntu配置jdk环境、安装eclipse、快捷方式
- ORACLE物化视图
- Linux常用命令-帮助命令
- SSL 1255_银河英雄传说_并查集
- loadrunner通过web的post请求方法测接口
- Spring REST Controller,在GET方式下,有多个参数时的处理
- Codeforces 746C Tram 模拟+思维
- JDBC学习之一
- 文件上传和下载
- 高速EDA电路设计-作业三
- AdaBoost算法详解
- An overview of gradient descent optimization algorithms