社区讨论
样例全对,但是提交全0分。求助
P7043「MCOI-03」村国参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo1635hb
- 此快照首次捕获于
- 2023/10/22 15:48 2 年前
- 此快照最后确认于
- 2023/11/02 15:23 2 年前
RT,这道题也没有开放下载数据,我实在是调不出来了。。。求助
思路是找到好感值最高的点A,在和A点相邻的所有点中找到好感值最高的B,于是答案就在A、B之中。讨论一下m的奇偶性即可。
CPP#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));
G[y].push_back(edge(y, x));
}
int mn = -1, mi = -1;//找B点
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[mi];
if (m > 0)a[mi] = 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();
}
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...