社区讨论

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 条回复,欢迎继续交流。

正在加载回复...