UESTC 914 -- 方老师分身 I(Dijkstra)
2015-04-07 19:06
323 查看
题目大意:
给出分身的点,求到各个点的往返路径。
思路分析:
正序用Dijkstra求一遍到各个点的最短路径(这是去的路径),再反向建图,用Dijkstra求一遍到各个点的最短路径(返回路径);
代码实现:
给出分身的点,求到各个点的往返路径。
思路分析:
正序用Dijkstra求一遍到各个点的最短路径(这是去的路径),再反向建图,用Dijkstra求一遍到各个点的最短路径(返回路径);
代码实现:
#include<cstdio> #include<cstring> #include<queue> using namespace std; int top,n,m,x,dis[3][1010],visit[1010],pos[100010][3]; struct Edge{ int v1,va; Edge *next; }*head[1010],e[100010]; void Addedge(int from,int to,int v){ Edge *p=&e[top++]; p->v1=to; p->va=v; p->next=head[from]; head[from]=p; } void Dijkstra(int i){ priority_queue<int> q; memset(visit,0,sizeof(visit)); dis[i][x]=0; q.push(x); int from,to; while(!q.empty()){ from=q.top(); q.pop(); visit[x]=1; for(Edge *p=head[from];p;p=p->next){ to=p->v1; if(!visit[to]&&dis[i][to]>dis[i][from]+p->va){ dis[i][to]=dis[i][from]+p->va; q.push(to); } } } } int main(){ while(~scanf("%d%d%d",&n,&m,&x)){ memset(dis,0x3f,sizeof(dis)); memset(head,0,sizeof(head)); top=0; for(int i=0;i<m;i++){ scanf("%d%d%d",&pos[i][0],&pos[i][1],&pos[i][2]); Addedge(pos[i][0],pos[i][1],pos[i][2]); } Dijkstra(0); memset(head,0,sizeof(head)); top=0; for(int i=0;i<m;i++) Addedge(pos[i][1],pos[i][0],pos[i][2]); Dijkstra(1); int max_r=0; for(int i=1;i<=n;i++){ if(dis[0][i]+dis[1][i]>max_r) max_r=dis[0][i]+dis[1][i]; } printf("%d\n",max_r); } }
相关文章推荐
- UESTC 914 方老师的分身I Dijkstra
- UESTC_方老师分身 I CDOJ 914
- cdoj914-方老师分身 I 【dijkstra】
- UESTC 916 方老师的分身III --拓扑排序
- uestc 方老师的分身 III 拓扑排序
- UESTC 917 方老师的分身IV --求欧拉路径
- UESTC 915 -- 方老师的分身 II (spfa,dijkstra)
- uestc 方老师的分身 II
- UESTC_方老师的分身 II CDOJ 915
- uestc 方老师的分身IV
- 2014 UESTC Training for Graph Theory Problem G 方老师分身 I
- 2014 UESTC Training for Graph Theory Problem H 方老师的分身 II
- UESTC 915 方老师的分身II --最短路变形
- 2014 UESTC Training for Graph Theory Problem I 方老师的分身 III
- uestc 方老师分身 I
- UESTC_方老师买表 CDOJ 885
- uestc 851 方老师与素数
- uestc 方老师和农场
- uestc 方老师炸弹
- UESTC 方老师开橙卡