码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj1006

时间:2017-10-27 23:01:35      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:oid   head   nbsp   str   tchar   技术   mat   size   ide   

貌似是最大势     见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

标签:oid   head   nbsp   str   tchar   技术   mat   size   ide   

原文地址:http://www.cnblogs.com/new-hand/p/7745462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!