1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int inf=1e9+5; const int N=3e5+5; struct edge{ int to; int w; }; vector<edge>G[N]; int dis[N]; bool vis[N]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ int x; cin>>x; G[i].push_back({i+n,-x}); G[i+n].push_back({i+2*n,x}); } for(int i=1;i<=m;i++){ int x,y,z; cin>>x>>y>>z; G[x].push_back({y,0}); G[x+n].push_back({y+n,0}); G[x+2*n].push_back({y+2*n,0}); if(z==2){ G[x].push_back({x,0}); G[y+n].push_back({x+n,0}); G[y+2*n].push_back({x+2*n,0}); } } for(int i=1;i<=3*n;i++)dis[i]=-inf; dis[1]=0; vis[1]=1; queue<int>q; q.push(1); while(!q.empty()){ int now=q.front(); q.pop(); vis[now]=0; for(auto x:G[now]){ int nex=x.to; int val=x.w; if(dis[now]+val>dis[nex]){ dis[nex]=dis[now]+val; if(vis[nex])continue; vis[nex]=1; q.push(nex); } } } cout<<dis[n*3]<<"\n"; return 0; }
- 1
信息
- ID
- 1198
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者