题目链接:点击打开链接
题目大意:关键路径。
解题思路:使用 rdijkstra(求最长路径),注意:存在多个出口。
AC 代码
usingnamespacestd; typedeflonglongll; constintmaxm=10010; structedge{ intu,v,w; }es[maxm]; intn,m; intdis[maxm], out[maxm]; voidinit() { mem(dis,0), mem(out,0); } intrdijkstra() { intf; for(inti=1;i<=n;i++) { f=0; for(intj=0;j<m;j++) if(dis[es[j].u]+es[j].w>dis[es[j].v]) f=1, dis[es[j].v]=dis[es[j].u]+es[j].w; if(!f) return1; } return0; } intmain() { init(); scanf("%d%d",&n,&m); for(inti=0;i<m;i++) { scanf("%d%d%d",&es[i].u,&es[i].v,&es[i].w); out[es[i].u]++; } vector<int>vd; // 最后一个测试点:存在多个出路for(inti=0;i<n;i++) if(!out[i]) vd.push_back(i); if(rdijkstra()) { intrs=-1; for(inti=0;i<vd.size();i++) rs=max(rs,dis[vd[i]]); printf("%d\n",rs); } elseputs("Impossible"); return0; }