萌新刚学图论,vector不会用求助
  • 板块灌水区
  • 楼主幽灵特工
  • 当前回复14
  • 已保存回复14
  • 发布时间2023/10/5 19:23
  • 上次更新2023/11/2 15:25:58
查看原帖
萌新刚学图论,vector不会用求助
332549
幽灵特工楼主2023/10/5 19:23

RT,程序进行到第31行时编译器报错了,说vector越界。为啥呀

#include<bits/stdc++.h>
using namespace std;
struct edge {
	int from, to;
	edge(int a, int b) { from = a; to = b; }
};
vector<edge>G[2000003];
int n;long long m;
int t;
int a[2000006];
int maxi, maxn;
int main() {
	ios::sync_with_stdio(0);
	cin >> t;
	while (t--) {
		cin >> n >> m;
		
		for (int i = 1; i <= n; i++) {
			cin >> a[i];
			if (a[i] > maxn) {
				maxn = a[i];
				maxi = i;
			}
		}
		int x, y;
		for (int i = 0; i < n - 1; i++) {
			cin >> x >> y;
			G[x].push_back(edge(x, y));
		}
		int mn = -1, mi = -1;
		for (int i = 0; i < G[maxi].size(); i++) {
			if (a[G[maxi][i].to] > mn) {
				mn = a[G[maxi][i].to];
				mi = G[maxi][i].to;
			}
		}
		m -= a[maxi] - a[G[maxi][mi].to];
		if (m > 0)a[G[maxi][mi].to] = a[maxi];
		else {
			cout << maxi << endl;
			for (int i = 1; i <= n; i++)G[i].clear();
			continue;
		}
		if (mi < maxi) {
			if (m % 2 == 0)cout << mi << endl;
			else cout << maxi << endl;
		}
		else {
			if (m % 2 == 1)cout << mi << endl;
			else cout << maxi << endl;
		}
		for (int i = 1; i <= n; i++)G[i].clear();
	}
}
2023/10/5 19:23
加载中...