zoukankan      html  css  js  c++  java
  • bzoj1006题解

    【题意分析】

      给你一张弦图,求图的最小染色数。

    【解题思路】

      这篇讲稿已经讲得很详尽了。。

      直接求完美消除序列,然后倒着染色即可。复杂度O(n2+nm)。

    【参考程序】

      求完美消除序列我是用的MCS(lexBFS都不会怎么办啊QAQ)。

      1 #include <cctype>
      2 #include <cstdio>
      3 #define REP(I,start,end) for(int I=(start);I<=(end);I++)
      4 #define PER(I,start,end) for(int I=(start);I>=(end);I--)
      5 inline int space()
      6 {
      7     return putchar(' ');
      8 }
      9 inline int enter()
     10 {
     11     return putchar('
    ');
     12 }
     13 inline int getint()
     14 {
     15     char ch=getchar();
     16     for(;!isdigit(ch)&&ch!='+'&&ch!='-';ch=getchar());
     17     bool impositive=ch=='-';
     18     if(impositive)
     19         ch=getchar();
     20     int result=0;
     21     for(;isdigit(ch);ch=getchar())
     22         result=(result<<3)+(result<<1)+ch-'0';
     23     return impositive?-result:result;
     24 }
     25 template<typename integer> inline int write(integer n)
     26 {
     27     integer now=n;
     28     bool impositive=now<0;
     29     if(impositive)
     30     {
     31         putchar('-');
     32         now=-now;
     33     }
     34     char sav[20];
     35     sav[0]=now%10+'0';
     36     int result=1;
     37     for(;now/=10;sav[result++]=now%10+'0');
     38     PER(i,result-1,0)
     39         putchar(sav[i]);
     40     return result+impositive;
     41 }
     42 template<typename T> inline bool getmax(T &target,T pattern)
     43 {
     44     return pattern>target?target=pattern,true:false;
     45 }
     46 template<typename T> inline bool getmin(T &target,T pattern)
     47 {
     48     return pattern<target?target=pattern,true:false;
     49 }
     50 //=====================Header Template=====================
     51 #pragma optimize(2)
     52 #include <algorithm>
     53 #include <cstring>
     54 #include <vector>
     55 using namespace std;
     56 typedef vector<int> vecint;
     57 typedef vecint::iterator vecnode;
     58 bool used[10010];
     59 int q[10010],label[10010],color[10010];
     60 vecint edge[10010],rec[10010];
     61 int main()
     62 {
     63     int n=getint();
     64     memset(edge,0,sizeof(edge));
     65     for(int m=getint();m--;)
     66     {
     67         int u=getint(),v=getint();
     68         edge[u].push_back(v);
     69         edge[v].push_back(u);
     70     }
     71     REP(i,1,n)
     72         sort(edge[i].begin(),edge[i].end());
     73     memset(used,0,sizeof(used));
     74     memset(label,0,sizeof(label));
     75     memset(rec,0,sizeof(rec));
     76     int best=label[0]=0;
     77     REP(i,1,n)
     78         rec[0].push_back(i);
     79     REP(i,1,n)
     80     {
     81         for(;;best-=rec[best].empty())
     82         {
     83             for(;!rec[best].empty()&&used[rec[best].back()];rec[best].pop_back());
     84             if(!rec[best].empty())
     85             {
     86                 used[q[i]=rec[best].back()]=true;
     87                 break;
     88             }
     89         }
     90         int now=q[i];
     91         for(vecnode it=edge[now].begin();it!=edge[now].end();it++)
     92         {
     93             int p=*it,pv=++label[p];
     94             rec[pv].push_back(p);
     95             getmax(best,pv);
     96         }
     97     }
     98     memset(color,0,sizeof(color));
     99     int ans=0;
    100     REP(i,1,n)
    101     {
    102         int now=q[i];
    103         memset(used,0,sizeof(used));
    104         for(vecnode it=edge[now].begin();it!=edge[now].end();it++)
    105             used[color[*it]]=true;
    106         REP(j,1,n)
    107             if(!used[j])
    108             {
    109                 color[now]=j;
    110                 getmax(ans,j);
    111                 break;
    112             }
    113     }
    114     write(ans);
    115     enter();
    116     return 0;
    117 }
    View Code
    We Secure, We Contain, We Protect.
  • 相关阅读:
    WCF-配置
    乡下人生活录——程序员给自己买份保险吧
    Sqlserver表分区
    Oracle通过Navicat导入表数据与机构,数据无法直接查询,需要加双引号的问题
    19.Imagetragick 命令执行漏洞(CVE-2016–3714)
    18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
    17.[CVE-2017-12615]Tomcat任意文件上传漏洞
    16.Tomcat弱口令 && 后台getshell漏洞
    15.Nginx 解析漏洞复现
    14.Nginx 文件名逻辑漏洞(CVE-2013-4547)
  • 原文地址:https://www.cnblogs.com/spactim/p/6425814.html
Copyright © 2011-2022 走看看