zoukankan      html  css  js  c++  java
  • bzoj1006[HNOI2008]神奇的国度

    传送门

    Description

      K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA
    相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系,是指N个人 A1A2
    ...An之间仅存在N对认识关系:(A1A2)(A2A3)...(AnA1),而没有其它认识关系.比如四边关系指ABCD四个人 AB,BC,C
    D,DA相互认识,而AC,BD不认识.全民比赛时,为了防止做弊,规定任意一对相互认识的人不得在一队,国王相知道,
    最少可以分多少支队。

    Input

      第一行两个整数N,M。1<=N<=10000,1<=M<=1000000.表示有N个人,M对认识关系. 接下来M行每行输入一对朋

    Output

      输出一个整数,最少可以分多少队

    Sample Input

    4 5
    1 2
    1 4
    2 4
    2 3
    3 4

    Sample Output

    3

    HINT

      一种方案(1,3)(2)(4)

    题解:

          弦图的最小点染色,传说这是一道论文题,好像只能在cdq论文《弦图与区间图》里看,讲道理我也不怎么会。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<algorithm>
     6 #include<cmath>
     7 #define maxm 2000010
     8 #define maxn 10010
     9 using namespace std;
    10 struct node{
    11     int to,next;
    12 }e[maxm];
    13 int head[maxn],dis[maxn],q[maxn],col[maxn],hash[maxn];
    14 bool vis[maxn];
    15 int n,m,cnt=1,ans;
    16 void add(int u,int v){
    17     e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;
    18     e[++cnt].to=u;e[cnt].next=head[v];head[v]=cnt;
    19 }
    20 int main(){
    21     scanf("%d%d",&n,&m);
    22     int i,j,x,y;
    23     for(i=1;i<=m;++i){
    24         scanf("%d%d",&x,&y);
    25         add(x,y);
    26     }
    27     for(i=n;i>=1;--i){
    28         int t=0;
    29         for(j=1;j<=n;++j){
    30             if(!vis[j] && dis[j]>=dis[t])  t=j;
    31         }
    32         vis[t]=1;q[i]=t;
    33         for(j=head[t];j;j=e[j].next){
    34             dis[e[j].to]++;
    35         }
    36     }
    37     for(i=n;i>=1;--i){
    38         int x=q[i];
    39         for(j=head[x];j;j=e[j].next){
    40             hash[col[e[j].to]]=i;
    41         }
    42         int k=1;
    43         for(k=1;;k++)  if(hash[k]!=i)  break ;
    44         col[x]=k;
    45         if(k>ans)  ans=k;
    46     }
    47     printf("%d
    ",ans);
    48     return 0;
    49 }
    50 
  • 相关阅读:
    一文了解网络编程之走进TCP三次握手和HTTP那些你不知道的事
    并发编程面试必备之ConcurrentHashMap源码解析
    java延迟队列DelayQueue及底层优先队列PriorityQueue实现原理源码详解
    聊一聊面试中常问的延时队列
    面试必备HashMap源码解析
    synchronized解锁源码分析
    synchronized的jvm源码加锁流程分析聊锁的意义
    jvm源码解析java对象头
    从ReentrantLock源码入手看锁的实现
    从synchronized和lock区别入手聊聊java锁机制
  • 原文地址:https://www.cnblogs.com/lazytear/p/8476050.html
Copyright © 2011-2022 走看看