我做过的最棘手的一道题了,不是因为难,难就是不懂,而是因为明明思路对了,却调了很久程序没发现自己哪错了。。。。。就连样例都不过

操,别人的代码::::::::::::::::::::::::::::...。。。

突然醒悟了,好像在坐标转换时错了。注意哦,坐标转换的方法。。。

坑了我一晚上。。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cctype>
#include <algorithm>
#define LL unsigned __int64
using namespace std; const int N= 40100; int pre[N],rank[N];
struct Edge{
int u,v,c;
char dir;
}edge[N];
struct Quest{
int u,v;
int index,idp;
bool operator <(const Quest &a)const{
if(index<a.index) return true;
return false;
}
}qask[N/4];
struct Node{
int dx,dy;
}node[N];
int ans[N];
int n,m,qk; int findx(int x){
int r=x;
int tx=node[x].dx,ty=node[x].dy;
while(pre[r]!=-1){
r=pre[r];
tx+=node[r].dx;
ty+=node[r].dy;
}
int dtx,dty,q;
while(x!=r){
q=pre[x];
dtx=node[x].dx,dty=node[x].dy;
node[x].dx=tx,node[x].dy=ty;
pre[x]=r;
tx-=dtx,ty-=dty;
x=q;
}
return r;
} void Union(int u,int v,int k){
int uf=findx(u);
int vf=findx(v);
pre[uf]=vf;
node[uf].dx=node[v].dx-node[u].dx;
node[uf].dy=node[v].dy-node[u].dy;
switch(edge[k].dir){
case 'N':node[uf].dy+=edge[k].c; break;
case 'S':node[uf].dy-=edge[k].c; break;
case 'W':node[uf].dx+=edge[k].c; break;
case 'E':node[uf].dx-=edge[k].c; break;
}
} void work(){
int li=0,root1,root2;
for(int i=0;i<qk;i++){
for(int k=li;k<qask[i].index&&k<m;k++){
Union(edge[k].u,edge[k].v,k);
}
root1=findx(qask[i].u);
root2=findx(qask[i].v);
if(root1!=root2){
ans[qask[i].idp]=-1;
}
else {
int a=abs(node[qask[i].u].dx-node[qask[i].v].dx);
int b=abs(node[qask[i].u].dy-node[qask[i].v].dy);
ans[qask[i].idp]=a+b;
}
li=qask[i].index;
}
} int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=1;i<=n;i++){
pre[i]=-1;
node[i].dx=node[i].dy=0;
}
for(int i=0;i<m;i++){
scanf("%d %d %d %c",&edge[i].u,&edge[i].v,&edge[i].c,&edge[i].dir);
}
scanf("%d",&qk);
for(int i=0;i<qk;i++){
scanf("%d%d%d",&qask[i].u,&qask[i].v,&qask[i].index);
qask[i].idp=i;
}
sort(qask,qask+qk);
work();
for(int i=0;i<qk;i++)
printf("%d\n",ans[i]);
}
return 0;
}

  

最新文章

  1. websocket的介绍
  2. HTML5 history新特性pushState、replaceState
  3. H5一行显示两个正方形
  4. python课程第二周重点记录
  5. sone2(未完成)
  6. visual studio插件开发dll类库免加全局缓存处理办法
  7. 【MVC 4】5.SportsSore —— 一个真实的应用程序
  8. Seismic Unix的一些历史
  9. IOS--UITextFiled的使用方法
  10. Anroid四大组件service之本地服务
  11. 微信公众号开发 VS2015本地调试
  12. zookeeper 启动失败 BindException: Address already in use 或者Error contacting service. It is probably not running
  13. JAVAFX-5 开发应用
  14. nginx1.14.0版本高可用——keepalived双机热备
  15. beta阶段测试基本概况对应机型硬件信息
  16. c++中的类(class)-----笔记(类多态)
  17. swift - 添加定时器
  18. java 线程Thread 技术--方法演示生产与消费模式
  19. 【代码笔记】iOS-4个可以单独点击的button
  20. SDN开源项目以及组织机构

热门文章

  1. expectation-maximization algorithm ---- PRML读书笔记
  2. 大数据攻城狮之Hadoop伪分布式篇
  3. Django day01 web应用程序 , http协议
  4. 练习2 及pl/sql
  5. Java多线程技术-Volatile关键字解析
  6. android service--delphixe 10.3
  7. My97DatePicker 动态设置有效/无效日期
  8. css的选择器效率分析
  9. nodejs脚手架express-generator
  10. wamp中的mysql服务与原来安装的mysql服务冲突的解决办法