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 
  • 相关阅读:
    闲置安卓设备搭建Linux服务器实现外网访问
    Flume笔记
    动态规划算法助记
    Hexo 添加Live2D看板娘
    Oracle 助记
    搭建Discuz论坛
    逆向工程(助记)
    PL/SQL Developer连接本地Oracle 11g 64位数据库
    NSOperation的基础
    GCD基础
  • 原文地址:https://www.cnblogs.com/lazytear/p/8476050.html
Copyright © 2011-2022 走看看