社区讨论
30pts求条,WA on #20,#29
P5590赛车游戏参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi5daphh
- 此快照首次捕获于
- 2025/11/19 10:12 4 个月前
- 此快照最后确认于
- 2025/11/20 04:03 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e4+10;
int n,m;
int a[N],b[N],c;
int op;
int dis[N];
bool vis[N],f,pd;
int hed[N],nxt[N],vtx[N],cost[N];
int cnt[N];
int tot;
inline void addedge(int x,int y,int z){
vtx[++tot]=y;
cost[tot]=z;
nxt[tot]=hed[x];
hed[x]=tot;
}
inline void SPFA(int s){
queue<int>q;
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
q.push(s);vis[s]=1,dis[s]=0;
while(!q.empty()&&!f){
int x=q.front();q.pop();
for(int i=hed[x];i&&!f;i=nxt[i]){
if(dis[vtx[i]]>dis[x]+cost[i]){
if(dis[vtx[i]]<0&&cnt[vtx[i]]>=n)f=1;
dis[vtx[i]]=dis[x]+cost[i];
if(vtx[i]<=n&&x<=n)cnt[vtx[i]]=cnt[x]+1;
if(!vis[vtx[i]])q.push(vtx[i]);
vis[vtx[i]]=1;
}
}
}
}
inline void bfs(int s){
queue<int>q;
q.push(s);
while(!q.empty()){
int x=q.front();q.pop();
vis[x]=1;
for(int i=hed[x];i;i=nxt[i]){
if(!vis[vtx[i]])q.push(vtx[i]);
vis[vtx[i]]=1;
}
}
}
int main(){
cin>>n>>m;
// cout<<n<<' '<<m<<'\n';
for(int i=1;i<=m;i++){
cin>>a[i]>>b[i];
// cout<<a<<' '<<b<<' '<<1<<'\n';
addedge(a[i],b[i],9);
addedge(b[i],a[i],-1);
}
bfs(1);
// for(int i=1;i<=n;i++)cout<<vis[i]<<' ';
// puts("");
if(!vis[n]){
puts("-1");
return 0;
}
for(int i=1;i<=n;i++)addedge(0,i,0);
SPFA(0);
if(f||dis[n]==0x3f3f3f3f)puts("-1");
else{
cout<<n<<' '<<m<<'\n';
for(int i=1;i<=m;i++){
cout<<a[i]<<' '<<b[i]<<' '<<max(1,min(9,dis[b[i]]-dis[a[i]]))<<'\n';
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...