- Sources:E - 合成大西瓜
- Abstract:给定由 个点、 条边构成的简单无向图( 为奇数),每个点具有点权 。将进行 次合并操作,最终图中仅剩 个点,求该点的最大点权。每次操作如下:
- 选择三个不同的点 ,当且仅当 ;
- 合并后的点为 ,其点权 ;
- 对于点 ,当且仅当 或 或 ,建立 ;
- 删除点 及某端为 的无向边。
- Keywords:图论,贪心(签到题)
- Solution:观察合并公式发现三点可组织为树形结构, 为根节点, 为叶子节点。为最大化最终点权,因此贪心:对于度为 的点,最终能保留的是次大值;度 的点,最终能保留的是最大值。
- Code:
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define int ll
#define endl "\n"
int n,m;
void solve(){
vector<int>w(n+1),du(n+1);
for(int i=1;i<=n;i++) cin>>w[i];
while(m--){
int a,b;cin>>a>>b;
du[a]++,du[b]++;
}
int leafmax=0,leafans=0,notleaf=0;
for(int i=1;i<=n;i++){
if(du[i]==1){
if(w[i]>leafmax) leafans=leafmax,leafmax=w[i];
else leafans=max(leafans,w[i]);
}else notleaf=max(notleaf,w[i]);
}
if(leafans==0) cout<<notleaf;
else if(notleaf==0) cout<<leafans;
else cout<<max(leafans,notleaf);
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具