题解:P13572 [CCPC 2024 重庆站] 合成大西瓜
fish_love_cat · · 题解
THUPC 2025「场内口胡大队,但是三三复活」RP++.
考虑判断留下某个点是否可以做到。
我们把这个预期留下的点视作根然后跑 bfs 树。
如果要留下的这个点的度数不为
因为
如果度数为
它能够被保留当且仅当它操作时另一个非中心点大于它。
那么可以把最大值保留过来作为另一个非中心点操作,将最大值作为根跑一个仿照上面东西的算法,但是把当前点留下,最后一步让这两个点合并,答案一定不小于我们预定的这个点。
综上,一个点不可选当且仅当除了自己所有点都小于该点且度数为
特判样例二。
于是做完了。
#include<bits/stdc++.h>
using namespace std;
int ans;
int a[100005];
int f[100005];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
ans=a[1];
while(m--){
int u,v;
cin>>u>>v;
f[u]++;
f[v]++;
if(f[u]>1)ans=max(ans,a[u]);
if(f[v]>1)ans=max(ans,a[v]);
}
sort(a+1,a+1+n);
cout<<max(a[n-1],ans);
return 0;
}
// 写这篇后记的时候,这个世界正面临各种动荡不安。我衷心盼望这本书送到各位读者手上之际,情况能稍微好转一些。
// 那么,但愿我们能再度于那片令人怀念的天空之下相见。
// 二〇二〇年 春
// 枯野 瑛