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);}