題意:本着切水題的態度,作了這個題,而後發現是最短路的變形,並且數據很小,floyd口胡以爲能過,具體沒試,直接上本身研究的dij+優先隊列,事實上跑的仍是比別人慢,333;node
#include<algorithm> #include<iostream> #include<map> #include<set> #include<vector> #include<stack> #include<queue> #include<cstring> #include<cstdio> #define INF 0 using namespace std; typedef struct node{ int x; int d; int date; }node; struct cmp{ bool operator()(node a,node b){ return a.d<b.d; } }; int dis[10005]; bool vis[10005]; int main(){ int m; vector<node>vec[10005]; while(cin>>m){ int n; cin>>n; int a,b,c; int ans=-1; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++){ cin>>a>>b>>c; ans=max(ans,a); ans=max(ans,b); node r; r.x=b;r.d=INF;r.date=c; vec[a].push_back(r); } memset(dis,INF,sizeof(dis)); dis[1]=0; priority_queue<node,vector<node>,cmp>que; node u; u.d=0;u.date=0;u.x=1; que.push(u); while(!que.empty()){ node p=que.top(); que.pop(); if(vis[p.x]==1) continue; for(int j=0;j<vec[p.x].size();j++){ node w=vec[p.x][j]; vis[p.x]=1; if(dis[w.x]<dis[p.x]+w.date){ dis[w.x]=dis[p.x]+w.date; node t; t.d=dis[w.x];t.x=w.x;t.date=w.date; que.push(t); } } } int sum=INF; for(int i=2;i<=ans;i++){ sum=max(sum,dis[i]); } cout<<sum<<endl; for(int i=1;i<=ans;i++){ vec[i].clear(); } } return 0; }