2018-2019 ACM-ICPC, Asia East Continent Final L Eventual … Journey

Posted qingyuyyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-2019 ACM-ICPC, Asia East Continent Final L Eventual … Journey相关的知识,希望对你有一定的参考价值。

#include<iostream>
using namespace std;
const int MAX=2e5+10;
int cnt[MAX];
int ans[MAX];
int a[MAX];
int main() {
    int n,m,zero=0,one=0;
    cin>>n>>m;
    for(int i=1; i<=n; i++) {
        scanf("%d",&a[i]);
        if(a[i]==0)zero++;
        else one++;
    }
    while(m--) {
        int x,y;
        scanf("%d%d",&x,&y);
        if(a[x]!=a[y]) {
            cnt[x]++;//记录每个点的桥 
            cnt[y]++;
        }
    }
    int A=0,B=0;
    for(int i=1; i<=n; i++) {
        if(a[i]==0&&cnt[i])A++;//0类,而且有桥,
        if(a[i]==1&&cnt[i])B++;//1类,数量
    }
    for(int i=1; i<=n; i++) {
        ans[i]+=cnt[i];//与异类相连的桥的数目,也就是步数
        if(a[i]==0)ans[i]+=zero-1;//加同类
        else ans[i]+=one-1;//同类
        if(cnt[i]==0) {//如果 这个站没有建桥
            if(a[i]==0) {//如果是0类
                ans[i]+=2*B;//一个点只算建在上面的一座桥,其他为在一个点上重复建桥的
                ans[i]+=3*(one-B);//
            } else {
                ans[i]+=2*A;
                ans[i]+=3*(zero-A);
            }
        } else {//如果这个点建桥了
            if(a[i]==0)ans[i]+=2*(one-cnt[i]);
            //如果是0类, 那么到1类的其他点的距离就是2
            else ans[i]+=2*(zero-cnt[i]);
        }
    }
    for(int i=1; i<=n; i++)
        cout<<ans[i]<<" ";
    return 0;
}

 

 

以上是关于2018-2019 ACM-ICPC, Asia East Continent Final L Eventual … Journey的主要内容,如果未能解决你的问题,请参考以下文章

训练20191009 2018-2019 ACM-ICPC, Asia East Continent Finals

2018-2019 ACM-ICPC, Asia Seoul Regional Contest

2019.05.02 第九次训练 2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest

2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest Solution

2018-2019 ACM-ICPC, Asia Seoul Regional Contest

I. Distance (模拟)2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest