不知道为什么RE了
查看原帖
不知道为什么RE了
1195979
tyiii楼主2024/3/13 16:20

题目给出的n<=5000,我给结构体数组分了5005,按理来说不应该出现越界的情况才对,我把数组开到50005后,原本RE的第五个测试点正常通过了,最后虽然把数组开到足够大后全部通过了测试点,但是有谁知道为什么一开始会RE吗

#include <bits/stdc++.h>
using namespace std;

int n, m, ans;
vector<int>outdeg;
struct Node {
	vector<int>vct, p;
	int deg, sum, idx;
}node[5005];

int main() {
	cin >> n >> m;
	for (int i = 1; i <= m; ++i) {
		int u, v;
		cin >> u >> v;
		node[v].p.push_back(u);
		node[u].vct.push_back(v);
		++node[v].deg;
		node[i].idx = 1;
	}
	queue<int>que;
	for (int i = 1; i <= n; ++i) {
		if (!node[i].deg) {
			que.push(i);
			node[i].sum = 1;
		}
		if (!node[i].vct.size()) outdeg.push_back(i);
	}
	while (!que.empty()) {
		int c = que.front();
		que.pop();
		for (int i = 0; i < node[c].vct.size(); ++i) {
			int idx = node[c].vct[i];
			--node[idx].deg;
			if (!node[idx].deg) que.push(idx);
		}
		for (int i = 0; i < node[c].p.size(); ++i) {
			int idx = node[c].p[i];
			node[c].sum = (node[c].sum+node[idx].sum)%80112002;
		}
	}

	for (int i = 0; i < outdeg.size(); ++i) {
		int c = outdeg[i];
		ans = (ans+node[c].sum)%80112002;
	}
	cout << ans;
	return 0;
}
2024/3/13 16:20
加载中...