MnZn求助 WA on Test5
查看原帖
MnZn求助 WA on Test5
100910
⚡小林子⚡海棠喵楼主2020/12/26 10:54

RT 似乎错的点都是输出 0 的

# include<cstdio>
# include<iostream>
# include<queue>
# include<vector>
# include<cstring>
# define V G[tmp][i].v
# define W G[tmp][i].w
using namespace std;
const int N = 5e3 + 5;
int n, m, t, u, v, w, ans, f[N][N], pre[N][N], in[N];
struct Edge {
	int v, w;
} ;
vector<Edge> G[N];
void add(int u, int v, int w) {
	G[u].push_back((Edge){v, w});
	in[v]++;
}
void dfs(int tmp, int num) {
	if(num == 0) return ;
	dfs(pre[tmp][num], num - 1);
	cout << tmp << " ";
}
signed main() {
	scanf("%d%d%d", &n, &m, &t);
	int i, j;
	for(i = 1; i <= n; i++) {
		scanf("%d%d%d", &u, &v, &w);
		add(u, v, w);
	}
	queue<int> q;
	memset(f, 0x3f, sizeof f);
	f[1][1] = 0;
	for(i = 1; i <= n; i++)
		if(!in[i]) q.push(i);
	while(!q.empty()) {
		int tmp = q.front(); q.pop();
		for(i = 0; i < G[tmp].size(); i++) {
			if(!--in[G[tmp][i].v]) q.push(G[tmp][i].v);
			for(j = 2; j <= n; j++)
				if(f[tmp][j - 1] + W < f[V][j]) {
					f[V][j] = f[tmp][j - 1] + W;
					pre[V][j] = tmp;
				}
		}
	}
	for(i = n; i >= 1; i--)
		if(f[n][i] <= t) {
			ans = i;
			break;
		}
	cout << ans << endl;
	dfs(n, ans);
	return 0;
}
2020/12/26 10:54
加载中...