2 条题解
-
0
求最多,跑最短路,约束形式:a-b<=c
#include<bits/stdc++.h> using namespace std; const int N=3e4+10; vector<pair<int,int>>G[N]; int d[N],t[N],st,ed; bool v[N]; int spfa() { memset(d,0x3f,sizeof(d)); memset(v,0,sizeof(v)); memset(t,0,sizeof(t)); queue<int>q;q.push(st);v[st]=1;d[st]=0;t[st]=1; while(!q.empty()) { int x=q.front();q.pop();v[x]=0; for(auto i:G[x]) { int y=i.first,w=i.second; if(d[y]>d[x]+w) { d[y]=d[x]+w; if(!v[y]) { q.push(y),v[y]=1,t[y]++; if(t[y]>ed-st+1)return -1; } } } } return d[ed]; } int main() { int n,m;scanf("%d%d",&n,&m); st=1e9,ed=0; for(int i=1,x,y,c;i<=m;i++) { scanf("%d%d%d",&x,&y,&c);//y-x<=c G[x].push_back({y,c}); st=min({st,x,y}); ed=max({ed,x,y}); } printf("%d\n",spfa()); return 0; } -
0
/* 求最多,跑最短路,约束形式:a-b<=c */ #include<bits/stdc++.h> using namespace std; const int N=3e4+10; vector<pair<int,int>>G[N]; int d[N],t[N],st,ed; bool v[N]; int spfa() { memset(d,0x3f,sizeof(d)); memset(v,0,sizeof(v)); memset(t,0,sizeof(t)); queue<int>q;q.push(st);v[st]=1;d[st]=0;t[st]=1; while(!q.empty()) { int x=q.front();q.pop();v[x]=0; for(auto i:G[x]) { int y=i.first,w=i.second; if(d[y]>d[x]+w) { d[y]=d[x]+w; if(!v[y]) { q.push(y),v[y]=1,t[y]++; if(t[y]>ed-st+1)return -1; } } } } return d[ed]; } int main() { int n,m;scanf("%d%d",&n,&m); st=1e9,ed=0; for(int i=1,x,y,c;i<=m;i++) { scanf("%d%d%d",&x,&y,&c);//y-x<=c G[x].push_back({y,c}); st=min({st,x,y}); ed=max({ed,x,y}); } printf("%d\n",spfa()); return 0; }
- 1
信息
- ID
- 716
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 27
- 已通过
- 13
- 上传者