社区讨论

65ptsWA求条

P11448「ALFR Round 3」D 核裂变参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mid7nszt
此快照首次捕获于
2025/11/24 21:57
3 个月前
此快照最后确认于
2025/11/24 23:04
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int v[500009];
vector<int> ve[5000009];
int tim[5000009];
int iss[5000009];
vector<int> g[5000009];
const int INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 998244353;

inline int read() {
	int ans = 0;
	char ch;
	while ((ch = getchar()) != EOF && !isdigit(ch)) {
	}
	if (ch == EOF) return 0;
	ans = ch - '0';
	while ((ch = getchar()) != EOF && isdigit(ch)) {
		ans = ans * 10 + (ch - '0');
	}
	return ans;
}

inline void write(long long x) {
	if (x == 0) {
		putchar('0');
		return;
	}
	char buffer[400]; 
	int pos = 0;  
	while (x > 0) {
		buffer[pos++] = x % 10 + '0';
		x = x / 10;
	}
	for (int i = pos - 1; i >= 0; i--) {
		putchar(buffer[i]);
	}
	return ;
}

signed main(){
	
	int n = read(),k = read(),m = read();
	for(int i = 1;i <= n;i++){
		tim[i] = INF;
	}
	deque<int> de;
	for(int i = 1;i <= m;i++){
		v[i] = read();
		tim[v[i]] = 0; 
		de.push_back(v[i]);
		iss[v[i]] = 1;
	}
	for(int i = 1;i <= n;i++){
		int a = read();
		for(int j = 1;j <= a;j++){
			int e = read();
			ve[i].push_back(e);
			g[e].push_back(i);
		}	
	}
	
	while(!de.empty()){
		int cl = de.front();
		de.pop_front();
		for(int cll:ve[cl]){
			if(tim[cll] == INF){
				tim[cll] = tim[cl] + 1;
				de.push_back(cll);
			}
		}
	}
	
	for(int i = 1;i <= n;i++){
		if(tim[i] >= k){
			putchar('0');
			putchar(' ');
			continue;
		}
		
		int ans = 0;
		if(iss[i]){
			ans += k % mod;
			ans %= mod;
		}
		ans += ve[i].size() * (k - tim[i]) % mod;
		ans %= mod;
		for(int cl:g[i]){
			if(tim[cl] < k){
				ans += k - tim[cl] - 1;
				ans %= mod;
			}
		}
		ans %= mod;
		write(ans);
		putchar(' ');
	}
	cout << endl;
	return 0;
}

最后三个点很靠后错了 提交记录

回复

1 条回复,欢迎继续交流。

正在加载回复...