比赛 4043级NOIP2022欢乐赛2nd 评测结果 AAAEEEEEEE
题目名称 液体运输 最终得分 30
用户昵称 HeSn 运行时间 1.401 s
代码语言 C++ 内存使用 6.47 MiB
提交时间 2022-10-31 20:12:48
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 200010;
int n, m, kk, q, a[MAXN], lans, dis[510][510];
//vector<int> cd[MAXN], w[MAXN];
signed main() {
	freopen("Xen.in", "r", stdin);
	freopen("Xen.out", "w", stdout);
	cin >> n >> m;
//	memset(dis, 0x3f, sizeof(dis));
	for(int i = 1; i <= m; i ++) {
		int x, y, z;
		cin >> x >> y >> z;
//		cd[x].push_back(y);
//		w[x].push_back(z);
//		cd[y].push_back(x);
//		w[y].push_back(z);
		dis[x][y] = dis[y][x] = max(dis[x][y], z);
	}
	for(int k = 1; k <= n; k ++) {
		for(int i = 1; i <= n; i ++) {
			for(int j = 1; j <= n; j ++) {
//				if(dis[i][k] && dis[k][j]) {
					dis[i][j] = max(dis[i][j], min(dis[i][k], dis[k][j]));
//				}
			}
		}
	}
	for(int i = 1; i <= n; i ++) {
		dis[i][i] = 0;
//		for(int j = 1; j <= n; j ++) {
//			cout << dis[i][j] << ' ';
//		}
//		cout << endl;
	}
	for(int i = 1; i <= n; i ++) {
		cin >> a[i];
	}
	cin >> q >> kk;
	for(int i = 1; i <= q; i ++) {
		int st, x, mod, ans, sum = 1;
		cin >> st >> x >> mod;
		st = (st + kk * lans) % n + 1;
		x = (x + kk * lans) % mod;
		ans = a[st];
//		cout << ' ' << st << ' ' << x << endl;
		for(int j = 1; j <= n; j ++) {
			if(j != st) {
				if(dis[j][st] >= x || dis[st][j] >= x) {
					sum ++;
					ans = min(ans, a[j]);
				}
			}
		}
		cout << sum << ' ' << ans << endl;
		lans = ans;
	}
	return 0;
}