并查集经典题之POJ1984
来源:互联网 发布:日常口语话题topic知乎 编辑:程序博客网 时间:2024/06/05 04:48
题意:依据n个Famr之间有限的连接关系,求解指定两个Farm之间的Manhattan distance
分析:
1.k个Query依据时间点的顺序输入
2.对于输入的每一个连接关系,动态更新合并树的相对坐标。
//Date: 2015.04.21//Time: 125ms//Memory: 1564k#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAX=40005;int sum[MAX];int n,m,k;struct Farm{ int x,y,tree,next;}farms[MAX];struct Information{ int f1,f2,dx,dy;}data[MAX];void Update(int t1,int t2,int dx,int dy){ int i=t2,p; while(~i){ farms[i].tree=t1; farms[i].x += dx; farms[i].y += dy; p=i;i=farms[i].next; } farms[p].next=farms[t1].next; farms[t1].next=t2; sum[t1]=sum[t1]+sum[t2]+1;}void init(){ memset(data,0,sizeof(data)); memset(sum,0,sizeof(sum)); memset(farms,0,sizeof(farms)); for(int i=1;i<=n;i++){ farms[i].tree=i; farms[i].next=-1; }}int main(){ int i,j,t,len,f1,f2,t1,t2; char dir; scanf("%d%d",&n,&m); init(); for(i=0;i<m;i++){ scanf("%d %d %d %c",&data[i].f1,&data[i].f2,&len,&dir); switch(dir){ case 'E':data[i].dx= len;break; case 'S':data[i].dy=-len;break; case 'W':data[i].dx=-len;break; case 'N':data[i].dy= len;break; } } scanf("%d",&k); for(j=i=0;i<k;i++){ scanf("%d %d %d",&f1,&f2,&t); for(;j<t;j++){ t1=farms[data[j].f1].tree;t2=farms[data[j].f2].tree; if(sum[t1]>=sum[t2]) Update(t1,t2,farms[data[j].f1].x+data[j].dx-farms[data[j].f2].x,farms[data[j].f1].y+data[j].dy-farms[data[j].f2].y); else Update(t2,t1,farms[data[j].f2].x-data[j].dx-farms[data[j].f1].x,farms[data[j].f2].y-data[j].dy-farms[data[j].f1].y); } t1=farms[f1].tree;t2=farms[f2].tree; if(t1!=t2) printf("-1\n"); else printf("%d\n",abs(farms[f1].x-farms[f2].x)+abs(farms[f1].y-farms[f2].y)); } return 0;}
0 0
- 并查集经典题之POJ1984
- poj1984(并查集)
- poj1984并查集的相对偏移
- poj1984 带权并查集
- poj1984 Navigation Nightmare(并查集)
- POJ1984 Navigation Nightmare(并查集)
- 【POJ1984】【二维加权并查集】【向量运算】【四边形法则】
- poj1984 Navigation Nightmare(带权并查集)
- kungbin专题五 并查集 POJ1984 Navigation Nightmare
- POJ1984 Dirt Ratio(详细解析+数据)_并查集+离线操作
- 经典并查集之畅通工程
- 经典的并查集之How Many Tables
- 并查集经典代码
- 经典并查集HDU1232
- 并查集经典题目
- 并查集经典题_代码等式_spoj179
- poj 1182 食物链 (种类并查集经典题)
- poj 1182 并查集经典题…
- Think Python:Chapter 6: Fruitful Functions 的笔记
- Linux系统安装后的基础优化-基于CentOS(5.8/6.4)
- CodeForce 534C Polycarpus' Dice (数学推理)
- Android Fragment出错:that is not a Fragment
- 接入网
- 并查集经典题之POJ1984
- sql处理带逗号的数据
- double保留两位小数的多方法
- Android HandlerThread使用方法 .
- <android>第一行代码 第二章源码整理
- Android Studio 1.1正式版 第一次设置
- [LeetCode]Rank Scores,解题报告
- EF 自动生成实体类中加验证的属性重新生成后属性被覆盖解决办法
- OMNeT++ 安装错误解决