WA #10
  • 板块CF721C Journey
  • 楼主Undead2008
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/6/29 19:44
  • 上次更新2023/11/3 12:08:01
查看原帖
WA #10
578628
Undead2008楼主2023/6/29 19:44

求助 程序只输出了两行两个 5000

#include<bits/stdc++.h>
using namespace std;
int n,m,T,ans;
const int maxn = 5010;
int c[maxn],fr[maxn][maxn];
int f[maxn][maxn];
struct link{int to,w;};
vector<link>l[maxn],b[maxn];
vector<int>d;
void topsort(){
	queue<int>q;
	for(int i=1;i<=n;i++)
		if(c[i]==0)q.push(i);
	while(!q.empty()){
		int x=q.front();q.pop();
		for(int i=0;i<l[x].size();i++){
			int to=l[x][i].to;
			for(int j=1;j<=n;j++){
				if(f[to][j]>f[x][j-1]+l[x][i].w){
					f[to][j]=f[x][j-1]+l[x][i].w;
					fr[to][j]=x;
				}
			}
			c[to]--;
			if(c[to]==0)q.push(to);
		}
	}
}
void dfs(int x,int cur){
    if(x<=0||x>n)return;
	d.push_back(x);
	if(x==1)return;
	dfs(fr[x][cur],cur-1);
}
signed main(){
	cin>>n>>m>>T;
	for(int i=1,u,v,w;i<=m;i++){
		cin>>u>>v>>w;
		l[u].push_back({v,w});
		c[v]++;
		b[v].push_back({u,w});
	}
	memset(f,7,sizeof(f));
	f[1][1]=0;
	topsort();
	for(int i=n;i>=1;i--){
		if(f[n][i]<=T){
			ans=i;
			break;
		}
	}
	cout<<ans<<endl;
	dfs(n,ans);
	for(int i=d.size()-1;i>=0;i--)
		cout<<d[i]<<' ';
}
2023/6/29 19:44
加载中...