Codeforces Round #810 (Div. 2) B Party

Problem - B - Codeforces

题意:

有n个人,其中有m对朋友关系,每个人都有一个unhappiness值,当这个人没有被邀请去派对时,就对答案贡献他的unhappiness值。每对被邀请的朋友都必须在派对带一个蛋糕,问派对中蛋糕数为偶数的最小unhappniess值。

思路:

显然,当m为偶数时,邀请所有人就好了,答案为0

当m为奇数时,我们需要在被邀请的人当中去掉一些人使得蛋糕个数为奇数

去掉一个人,蛋糕个数就会减少他所对应的度数

观察样例知,我们有两种选择:

1.去掉一个人,他的度数为奇数

2.去掉两个人,他们的度数加起来为偶数

一开始想错了,以为去掉一个人,蛋糕只会减少一个,显然不对

想错的地方还有:去掉两个人,对答案的unhappiness贡献值不一定会增加

Code:

const int mxn=1e5+10;
ll a[mxn],in[mxn],f[mxn][3];
void solve(){
    ll n=llrd(),m=llrd(),x,y,ans=mnf,ans2=mnf;
    rep(i,1,n){
        a[i]=llrd();
        in[i]=0;
    }
    rep(i,1,m){
        x=llrd(),y=llrd();
        f[i][0]=x,f[i][1]=y;
        in[x]++,in[y]++;
    }
    if(m%2==0){
        puts("0");
        return;
    }else{
        rep(i,1,n){
            if(in[i]%2==1) ans=min(ans,a[i]);
        }
        rep(i,1,m){
            if(in[f[i][0]]%2==0&&in[f[i][1]]%2==0) ans2=min(ans2,a[f[i][0]]+a[f[i][1]]);
        }
        printf("%lld\n",min(ans,ans2));
    }
}

总结:

1.这是道1300的graph题,由此可知,1300的题不一定难,而且graph题不一定要建图,也不一定要用到图论的一些算法,也许就是一些简单应用

2.善于观察样例,把自己的想法用样例模拟一遍之后,如果能过再去下笔,否则一下子写下来发现样例都没过,就GG了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值