Uva-10816-Travel in Desert
来源:互联网 发布:硬盘坏了数据还在吗 编辑:程序博客网 时间:2024/06/05 09:51
卡了接近1天,结果发现是输出答案输出反了。
方法就是二分枚举w温度值,然后跑Spfa
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>using namespace std;const double eps=1e-8;const int inf=1<<29;const int maxn=1010;const int maxm=2e5+100;int e,n,m,st,des,head[maxn],nxt[maxm],pnt[maxm],pre[maxn],costr[maxm],costd[maxm],dist[maxn];bool vis[maxn];queue<int> q;void AddEdge(int u,int v,int cr,int cd){ pnt[e]=v;nxt[e]=head[u];costr[e]=cr;costd[e]=cd;head[u]=e++; pnt[e]=u;nxt[e]=head[v];costr[e]=cr;costd[e]=cd;head[v]=e++;}void DFS(int u){ if(u==st) { printf("%d",st); return; } DFS(pre[u]); printf(" %d",u);}bool Spfa(int st,int des,int val){ memset(pre,-1,sizeof(pre)); for(int i=0;i<=n;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(costr[i]<=val&&dist[pnt[i]]>dist[u]+costd[i]) { dist[pnt[i]]=dist[u]+costd[i]; pre[pnt[i]]=u; if(!vis[pnt[i]]) { q.push(pnt[i]); vis[pnt[i]]=1; } } } } if(dist[des]!=inf) return true; return false;}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { e=0; memset(head,-1,sizeof(head)); scanf("%d%d",&st,&des); int sl=inf,sr=0; for(int i=0;i<m;i++) { int u,v,r,d; int sa1,sa2,sb1,sb2; scanf("%d%d%d.%d%d.%d",&u,&v,&sa1,&sa2,&sb1,&sb2); r=sa1*10+sa2; d=sb1*10+sb2; AddEdge(u,v,r,d); sl=min(sl,r); sr=max(sr,r); } int ans=0; while(sl<=sr) { int mid=(sl+sr)>>1; if(Spfa(st,des,mid)) { ans=mid; sr=mid-1; } else sl=mid+1; } Spfa(st,des,ans); DFS(des); printf("\n"); printf("%.1f %.1f\n",dist[des]*1.0/10,ans*1.0/10); } return 0;}
0 0
- Uva-10816-Travel in Desert
- Travel in Desert UVA
- Uva 10816 Travel in Desert 【SPFA+二分】
- UVA 10816 - Travel in Desert(二分+dijkstra)
- UVA 10816 Travel in Desert 最短路+二分
- UVA 10816 Travel in Desert 最短路+Kruscal
- uva 10816 Travel in Desert(简单的好题~两种方法)
- UVA - 10816 Travel in Desert(枚举+生成树+最短路)
- uva 10816 - Travel in Desert(最小瓶颈生成树+最短路)
- uva 10816 Travel in Desert (最小生成树 + 最短路)
- UVA 10816 - Travel in Desert(最小生成树+最短路)
- uva10816 Travel in Desert(MST + 最短路)
- UVA 10816 Traverl in Desert(最短路+二分)
- UVa10816 - Travel in Desert(二分法+最短路径求法)
- UVa 11935 - Through the Desert
- hdu 5899 oasis in desert
- UVA 617 - Nonstop Travel
- UVA 10842 Travel Flow
- C++中函数名前后加const
- 自己看一下
- UITableViewCell圆角问题
- java Math.round()比较特殊的四舍五入
- flex的执行顺序还需要注意下
- Uva-10816-Travel in Desert
- 编程题目: PAT 1013. 数素数 (20)
- Postfix + Openssl + Dovecot + Squirrelmail 搭建安全WEB邮箱服务器
- WiFi下的网上购物注意要点
- vs2008调试出现异常时触发断点位置和堆栈不正确的解决
- jquery ajax abort()方法
- 《剑指offer》学习心得第一日
- 编程之美读书笔记1.3 —— 一摞烙饼的排序
- domino环境下fckeditor编辑器无法上传图片的解决办法