bzoj1006

Posted 新手-周

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1006相关的知识,希望对你有一定的参考价值。

貌似是最大势     见cdq论文《弦图与区间图》

技术分享
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
const int maxn=10000+10;
const int maxm=2000000+10;
struct hh
{
  int v,next;
}e[maxm];
int n,m,point,ans;
int del[maxn],head[maxn],pt[maxn],kd[maxn];
template <class T> void read(T&x)
{
  x=0;char c=getchar();int f=0;
  while(c<0||c>9){f|=(c==-);c=getchar();}
  while(c>=0&&c<=9)x=(x<<3)+(x<<1)+(c^=48),c=getchar();
  x=f?-x:x;
}
void add(int u,int v)
{
  e[++point].v=v;e[point].next=head[u];head[u]=point;
  e[++point].v=u;e[point].next=head[v];head[v]=point;
}
int main()
{
  memset(head,-1,sizeof(head));
  read(n);read(m);
  int u,v;
  for(register int i=1;i<=m;i++)
  {
    read(u);read(v);
    add(u,v);
  }
  for(register int i=n;i;i--)
  {
    int k=0;
    for(int j=1;j<=n;j++)if(pt[j]>=pt[k]&&!del[j])k=j;
    del[k]=1;
    for(int j=head[k];j!=-1;j=e[j].next)if(!del[e[j].v])pt[e[j].v]++;
  }
  for(int i=n;i>0;i--)if(!kd[pt[i]]){ans++;kd[pt[i]]=1;}
  printf("%d",ans);
  return 0;
} 
View Code
技术分享
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
const int maxn=10000+10;
const int maxm=2000000+10;
struct hh
{
  int v,next;
}e[maxm];
int n,m,point,ans;
int del[maxn],head[maxn],pt[maxn],kd[maxn];
template <class T> void read(T&x)
{
  x=0;char c=getchar();int f=0;
  while(c<0||c>9){f|=(c==-);c=getchar();}
  while(c>=0&&c<=9)x=(x<<3)+(x<<1)+(c^=48),c=getchar();
  x=f?-x:x;
}
void add(int u,int v)
{
  e[++point].v=v;e[point].next=head[u];head[u]=point;
  e[++point].v=u;e[point].next=head[v];head[v]=point;
}
int main()
{
  memset(head,-1,sizeof(head));
  read(n);read(m);
  int u,v;
  for(register int i=1;i<=m;i++)
  {
    read(u);read(v);
    add(u,v);
  }
  for(register int i=n;i;i--)
  {
    int k=0;
    for(int j=1;j<=n;j++)if(pt[j]>=pt[k]&&!del[j])k=j;
    del[k]=1;
    for(int j=head[k];j!=-1;j=e[j].next)if(!del[e[j].v])pt[e[j].v]++;
  }
  for(int i=n;i>0;i--)if(!kd[pt[i]]){ans++;kd[pt[i]]=1;}
  printf("%d",ans);
  return 0;
} 
View Code

 

以上是关于bzoj1006的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1006HNOI2008神奇的国度

BZOJ1006神奇的国度(弦图)

bzoj1006

bzoj1006

bzoj1006神奇的国度

bzoj 1006: [HNOI2008]??????????????? -- ???????????????????????????