社区讨论
I AK IOI!
P7163 [COCI 2020/2021 #2] Svjetlo参与者 7已保存回复 45
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 45 条
- 当前快照
- 1 份
- 快照标识符
- @mhj00zmw
- 此快照首次捕获于
- 2025/11/03 18:30 4 个月前
- 此快照最后确认于
- 2025/11/03 20:27 4 个月前
绷,不 RT,不用这种标题没人帮我调题()
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=0x3f3f3f3f;
int n,f[500005][2],g[500005][2],h[500005][2];
string s;
vector<int>G[500005];
void dfs(int u,int fa){
if(s[u]=='0'){
f[u][0]=0;
f[u][1]=INF;
}
else{
f[u][0]=INF;
f[u][1]=0;
}
g[u][0]=g[u][1]=h[u][0]=h[u][1]=INF;
for(auto v:G[u]){
if(v==fa)continue;
dfs(v,u);
int f0=f[u][0],f1=f[u][1],g0=g[u][0],g1=g[u][1],h0=h[u][0],h1=h[u][1];
f[u][0]=min(f0+f[v][1]+4,f1+f[v][0]+2);
f[u][1]=min(f0+f[v][0]+2,f1+f[v][1]+4);
g[u][0]=min(g0+f[v][1]+4,min(g1+f[v][0]+2,min(f0+g[v][0]+3,f1+g[v][1]+1)));
g[u][1]=min(g0+f[v][0]+2,min(g1+f[v][1]+4,min(f0+g[v][1]+1,f1+g[v][0]+3)));
h[u][0]=min(f0+h[v][1]+4,min(f1+h[v][0]+2,min(g0+g[v][1]+2,min(g1+g[v][0],min(h0+f[v][1]+4,h1+f[v][0]+2)))));
h[u][1]=min(f0+h[v][0]+2,min(f1+h[v][1]+4,min(g0+g[v][0]+2,min(g1+g[v][1],min(h0+f[v][0]+2,h1+f[v][1]+4)))));
}
g[u][0]=min(g[u][0],f[u][1]+1);
g[u][1]=min(g[u][1],f[u][0]+1);
h[u][0]=min(h[u][0],g[u][0]);
h[u][1]=min(h[u][1],g[u][1]);
}
signed main(){
cin>>n>>s;
s=" "+s;
for(int i=1,u,v;i<n;i++){
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
int root=1;
for(int i=1;i<=n;i++){
if(s[i]=='0'){
root=i;
break;
}
}
dfs(root,0);
cout<<h[root][1];
return 0;
}
回复
共 45 条回复,欢迎继续交流。
正在加载回复...