相当与一个拓扑排序的模板题吧
蒟蒻的辛酸史
题目大意:给你一个有向无环图,让你求出1到n的最长路,如果没有路径,就输出-1
思路:一开始以为是一个很裸的拓扑排序
就不看题目,直接打了一遍拓扑排序
然后就得到了45分的成绩
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<cmath> #define int long long int using namespace std; struct node { int u; int v; int w; int next; }data[1000010]; int head[1000010]; int cnt; int n,m; inline void add(int u,int v,int w) { cnt++; data[cnt].v=v; data[cnt].w=w; data[cnt].next=head[u]; head[u]=cnt; } queue<int> q; int fl[1000010]; int value[1000010]; signed main() { cin>>n>>m; for(int i=1;i<=m;i++) { int u,v,w; cin>>u>>v>>w; add(u,v,w); fl[v]++; } for(int i=1;i<=n;i++) { if(fl[i]==0) { q.push(i); } } while(!q.empty()) { int x=q.front(); q.pop(); for(int i=head[x];i;i=data[i].next) { if(value[data[i].v]<value[x]+data[i].w) { value[data[i].v]=value[x]+data[i].w; } fl[data[i].v]--; if(!fl[data[i].v]) { q.push(data[i].v); } } } int ans=0; for(int i=1;i<=n;i++) { ans=max(ans,value[i]); } cout<<ans<<endl; return 0; }