poj 3268 spfa 和dijkstra堆优化 +矩阵逆转。
2014-04-07 22:57
429 查看
ps 这道题用floyd准超时。
所以只能用spfa或者dijkstra堆优化
spfa代码:
dijkstra堆优化 代码:
所以只能用spfa或者dijkstra堆优化
spfa代码:
#include <iostream> #include<queue> #include <vector> using namespace std; struct edge{int from,to,cost;}e[110000]; vector<edge>map[1100]; int d[1100],ans[1100]; int n,m,x; void spfa(int x) { bool used[1100]={0}; fill(d,d+n+2,321321321); queue<int>que; d[x]=0; used[x]=1; que.push(x); while(!que.empty()) { int id=que.front(); used[id]=0; for(int i=0;i<map[id].size();i++) { edge t=map[id][i]; if(d[t.to]>d[id]+t.cost) { d[t.to]=d[id]+t.cost; if(!used[t.to]) { used[t.to]=1; que.push(t.to); } } } que.pop(); } } int main() { cin>>n>>m>>x; for(int i=1;i<=m;i++) { cin>>e[i].from>>e[i].to>>e[i].cost; map[e[i].from].push_back(e[i]); } spfa(x); for(int i=1;i<=n;i++) { ans[i]=d[i]; map[i].clear(); } for(int i=1;i<=m;i++) { swap(e[i].from,e[i].to); map[e[i].from].push_back(e[i]); } spfa(x); int maxn=0; for(int i=1;i<=n;i++) { ans[i]+=d[i]; maxn=ans[i]>maxn?ans[i]:maxn; } cout<<maxn<<endl; return 0; }
dijkstra堆优化 代码:
#include <iostream> #include <queue> #include <vector> #include <functional> using namespace std; struct edge{int from,to,cost;}; vector <edge> map[1100]; typedef pair<int,int>P; int n,m,x; int d[1100],ans[1100]; edge e[110000]; void dijkstra(int a) { for(int i=1;i<=n;i++) d[i]=100000000; d[a]=0; priority_queue<P,vector<P>,greater<P> >que; que.push(P(0,a)); while(!que.empty()) { P p=que.top(); que.pop(); int v=p.second; if(d[v]<p.first) continue; for(int i=0;i<map[v].size();i++) { edge e=map[v][i]; if(d[e.to]>d[v]+e.cost) { d[e.to]=d[v]+e.cost; que.push(P(d[e.to],e.to)); } } } } int main() { cin>>n>>m>>x; for(int i=1;i<=m;i++) { cin>>e[i].from>>e[i].to>>e[i].cost; map[e[i].from].push_back(e[i]); } dijkstra(x); for(int i=1;i<=n;i++) { ans[i]=d[i]; map[i].clear(); } for(int i=1;i<=m;i++) { swap(e[i].from,e[i].to); map[e[i].from].push_back(e[i]); } dijkstra(x); int maxn=0; for(int i=1;i<=n;i++) { ans[i]+=d[i]; maxn=ans[i]>maxn?ans[i]:maxn; } cout<<maxn<<endl; return 0; }
相关文章推荐
- poj 3268 Dijkstra+矩阵逆转让多源变单源
- POJ 3268 Dijkstra+priority_queue或SPFA
- POJ 3268 Dijkstra+priority_queue或SPFA
- POJ - 3268 Silver Cow Party (往返最短路,Floyd,Dijkstra 2次优化)
- Silver Cow Party poj 3268 Dijkstra,spfa,+vector
- POJ ~ 1511 ~ Invitation Cards (逆向建边 + (SPFA或(优先队列优化的Dijkstra)))
- POJ 3013 Big Christmas Tree(最短Dijkstra+优先级队列优化,SPFA)
- 最短路练习10/poj/1511 Invitation Cards ,(两次spfa),(单源最短路,优先队列优化的Dijkstra)
- poj 3268 Silver Cow Party(dijkstra||SPFA)(中等)
- poj 3268 Silver Cow Party , spfa , dijkstra
- POJ-3268 Silver Cow Party[Dijkstra] [邻接矩阵] [置换矩阵]
- POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA)
- POJ 3268 Silver Cow Party (来回最短路 SPFA)
- Dijkstra堆优化与SPFA模板
- POJ ~ 3268 ~ Silver Cow Party (Dijkstra + 逆向建边)
- pku 1511 Invitation Cards (SPFA 和 dijkstra+优先级队列优化)
- POJ - 3268----Silver Cow Party(Dijkstra)
- POJ 3268 Silver Cow Party (最短路dijkstra)
- POJ 3268 Silver Cow Party(dijkstra)
- poj 3268 Silver Cow Party dijkstra基础题!!!入门