HDU-4885-TIANKENG’s travel
来源:互联网 发布:网络诈骗有哪些形式 编辑:程序博客网 时间:2024/06/06 07:28
这个题是求最短路,只不过需要处理一下,将所有中间没有其他加油站的点进行连边,权值为1,然后求1->2的最短路即可
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<queue>#include<algorithm>#include<set>using namespace std;const int inf=1<<29;const int maxn=1100;const int maxm=maxn*maxn;struct Node{ long long x; long long y; int pos; bool operator < (const Node &a)const { if(x==a.x) return y<a.y; return x<a.x; }}a[maxn];long long l;int n,e,head[maxn],nxt[maxm],pnt[maxm],cost[maxm],dist[maxn];bool vis[maxn];queue<int> q;set<pair<int,int> > pi;long long Dis(int i,int j){ return (a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);}void AddEdge(int u,int v,int c){ pnt[e]=v;nxt[e]=head[u];cost[e]=c;head[u]=e++; pnt[e]=u;nxt[e]=head[v];cost[e]=c;head[v]=e++;}void Spfa(int st,int des){ for(int i=0;i<n+2;i++) dist[i]=inf; dist[st]=0; q.push(st); while(!q.empty()) { int u=q.front(); vis[u]=0; q.pop(); for(int i=head[u];i!=-1;i=nxt[i]) if(dist[pnt[i]]>dist[u]+cost[i]) { dist[pnt[i]]=dist[u]+cost[i]; if(!vis[pnt[i]]) { q.push(pnt[i]); vis[pnt[i]]=1; } } } if(dist[des]==inf) printf("impossible\n"); else printf("%d\n",dist[des]-1);}bool check(int si,int sj){ int sy=a[sj].y-a[si].y; int sx=a[sj].x-a[si].x; int py=sy/__gcd(sx,sy); int px=sx/__gcd(sx,sy); if(pi.find(make_pair(px,py))!=pi.end()) return false; pi.insert(make_pair(px,py)); return true;}int main(){ int T; scanf("%d",&T); while(T--) { e=0; memset(head,-1,sizeof(head)); scanf("%d%I64d",&n,&l); for(int i=0;i<n+2;i++) { scanf("%I64d%I64d",&a[i].x,&a[i].y); a[i].pos=i; } sort(a,a+n+2); long long sl=l*l; for(int i=0;i<n+2;i++) { pi.clear(); for(int j=i+1;j<n+2;j++) { if(Dis(i,j)<=sl&&check(i,j)) AddEdge(a[i].pos,a[j].pos,1); } } Spfa(0,1); } return 0;}
0 0
- HDU-4885-TIANKENG’s travel
- HDU 4885 TIANKENG’s travel
- HDU 4885 TIANKENG’s travel(几何bfs)
- 【HDU】4885 TIANKENG’s travel 最短路
- hdu 4885 TIANKENG’s travel(bfs)
- HDU 4885 TIANKENG’s travel 最短路
- hdu 4885TIANKENG’s travel bfs
- HDU 4885 —— TIANKENG’s travel(最短路)
- 【最短路】 HDOJ 4885 TIANKENG’s travel
- hdu 4885 TIANKENG’s travel (最短路+判断三点共线)
- [ACM] HDU 4885 TIANKENG’s travel (特殊建图,最短路)
- HDU 4885 Bestcoder#2-1003 TIANKENG’s travel 【判断三点共线建图 + 最短路bfs】
- hdu TIANKENG’s restaurant
- TIANKENG’s restaurant HDU
- HDU 4883 TIANKENG’s restaurant
- hdu 4883 TIANKENG’s restaurant
- HDU 4883 TIANKENG’s restaurant
- hdu 4883 TIANKENG’s restaurant
- ActionScript3游戏中的图像编程(连载十三)
- ACdream 1142 String opearation
- 《小时代2青木时代》 短评 与郭敬明的中立评价
- 13.3 Palindrome Partitioning II
- 遍历文件夹下所有文件
- HDU-4885-TIANKENG’s travel
- 10 Articles Every Programmer Must Read
- 网卡故障:弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接System eth0 的
- 13.4 Maximal Rectangle
- 快速高斯滤波函数[修正完善版]
- python正则表达式
- vs2012离线语言安装包(英文) + 安装方法
- 删除所有JTable rows
- iOS Runtime Programing