[ARC098F] Donation 题解
[ARC098F] Donation 题解
题目描述
给定一张
题目分析
提供一个真正无脑的方案。
首先考虑每个点消耗权值并不好处理,我们将消耗权值改成逆过程,即获取权值,那么问题转化为到达一个点会获得
那么对于最少初始权值的求解,我们直接二分答案。
首先考虑处理经过一个点需要的权值,要限定可以走的节点,我们直接将每条边的边权赋成
注意:要考虑点数为
代码
/*
* @Author: Ehundategh
* @Date: 2023-11-03 11:43:20
* @FilePath: \Code\11.3\[ARC098F] Donation.cpp
* @Description: You Steal,I Kill
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LSon Node[Now].LeftS
#define RSon Node[Now].RightS
#define MAXN 100010
using namespace std;
int Head[MAXN],Total=0,n,m,cnt=0;
long long Sum=0;
int A[MAXN],B[MAXN];
int Fa[MAXN<<1];
struct edge{
int St,Ed,Value;
}Edge[MAXN];
bool cmp(edge a,edge b){return a.Value<b.Value;}
struct node{
int LeftS,RightS;
long long Get,Limit;
int Father;
}Node[MAXN<<1];
int Find(int x){return Fa[x]==x?x:Fa[x]=Find(Fa[x]);}
void Merge(int a,int b,int c,int Value){
Node[c].Limit=Value;
Node[a].Father=c;Node[b].Father=c;
Node[c].LeftS=a,Node[c].RightS=b;
Node[c].Get=Node[a].Get+Node[b].Get;
Fa[a]=c;Fa[b]=c;
}
void Kruskal(){
sort(Edge+1,Edge+m+1,cmp);cnt=n;
for(int i=1;i<=2*n;i++) Fa[i]=i;
for(int i=1;i<=m;i++){
int x=Edge[i].St,y=Edge[i].Ed;
if(Find(x)==Find(y)) continue;
Merge(Find(x),Find(y),++cnt,Edge[i].Value);
}
return;
}
long long DFS(int Now,long long Start){
if(Now<=n) return Start+Node[Now].Get>=Node[Now].Limit?Start+Node[Now].Get:0;
long long GL=DFS(LSon,Start),GR=DFS(RSon,Start);
if(!(GL||GR)) return 0;
long long Max=max(GL,GR);
return Max>=Node[Now].Limit?Node[Now].Get+Start:0;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d%d",&A[i],&B[i]);
Node[i].Get=B[i];
Sum+=1ll*B[i];
}
if(n==1) {printf("%d\n",A[1]);return 0;}
for(int i=1;i<=m;i++){
scanf("%d%d",&Edge[i].St,&Edge[i].Ed);
Edge[i].Value=max(max(A[Edge[i].St]-B[Edge[i].St],0),max(A[Edge[i].Ed]-B[Edge[i].Ed],0));
}
Kruskal();
long long L=0,R=1ll<<50;
while(L<R){
long long Mid=(L+R)>>1;
if(Mid==R) Mid--;
if(DFS(cnt,Mid)) R=Mid;
else L=Mid+1;
}
printf("%lld\n",L+Sum);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】