码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-12-07 14:25:29      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:out   bsp   ace   class   tin   pac   journey   include   --   

#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

标签:out   bsp   ace   class   tin   pac   journey   include   --   

原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12001477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!