读书人

CF #151 div 二

发布时间: 2012-11-26 11:48:50 作者: rapoo

CF #151 div 2

前四题都很简单,最后一题还没做。

前两题简单的懒得贴代码了。

C。其实还是很简单,但是因为有个地方考虑错了,后来被人 hack掉了,因为就做了一小时的比赛就睡觉了,起来后才发现被hack,所以特意把题目重新做了一遍,发现水题A的还是有点挫。。

好吧贴代码。

struct kdq{    int u,v;    int next;} edge[1000005];int num=0;int head[100005];void insert(int u,int v){    edge[num].u=u;    edge[num].v=v;    edge[num].next=head[u];    head[u]=num++;}set<int >vv[100005];int vis[100005];void solveD(){    int n,m;    cin>>n>>m;    memset(head,-1,sizeof(head));    for(int i=1; i<=n; i++)        scanf("%d",&a[i]);    while(m--)    {        int a1,b1;        scanf("%d%d",&a1,&b1);        insert(a1,b1);        insert(b1,a1);    }    for(int i=1; i<=n; i++)    {        for(int j=head[i]; j!=-1; j=edge[j].next)        {            int v=edge[j].v;            if(a[i]!=a[v])//不能将颜色一样的点加入到这一点的集合里面            vv[a[i]].insert(a[v]);        }    }    int ans=-1;    int color=-1;    for(int i=1; i<=n; i++)    {        if(vis[a[i]])continue;        int kk=vv[a[i]].size();        if(kk>ans)        {            ans=kk;            color=a[i];        }        else if(kk==ans)        {            if(color>a[i])                color=a[i];        }        vis[a[i]]=1;    }    printf("%d\n",color);}

E。

读书人网 >编程

热点推荐