洛谷P1807 最長路_NOI導刊2010提高(07) 最長路
阿新 • • 發佈:2018-12-06
pro ace prior show str back con 去掉 esp
傳送門
把邊的權值改為負的,然後跑一遍最短路,對得到的結果取負就行了。忽然意識到邊的權值變為負的之後就不能用dijkstra了,因該用spfa,不過把dijkstra裏判斷是否進入過堆的語句去掉也a了。
#include<iostream> #include<vector> #include<queue> using namespace std; int n,m; vector<pair<int,int> >g[1505]; priority_queue<pair<int,int> >q; int book[1505]; int dis[1505]; const int inf=99999999; void dijkstra() { int i; for(i=1;i<=n;i++)dis[i]=inf; dis[1]=0; q.push(make_pair(0,1)); while(q.size()) { int x=q.top().second;q.pop(); // if(book[x]==1)continue; // book[x]=1; for(i=0;i<g[x].size();i++) {int y=g[x][i].second; int yy=g[x][i].first; if(dis[y]>dis[x]+yy) { dis[y]=dis[x]+yy; q.push(make_pair(-dis[y],y)); } } } } void solve() { cin>>n>>m; for(int i=1;i<=m;i++) {int a,b,c; cin>>a>>b>>c; g[a].push_back(make_pair(-c,b));//第二位是頂點編號 } dijkstra(); if(dis[n]==inf)cout<<"-1\n"; else cout<<-dis[n]<<endl; } int main() { solve(); }
洛谷P1807 最長路_NOI導刊2010提高(07) 最長路