niop 2003 传染病控制 (哎呀我氧化钙 坑了好久的搜索题)

/*
我觉得挺对的啊 实在是考虑不到有什么情况会判不了
70分 就这样吧 - -
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#define maxn 310
using namespace std;
int init()
{
    int x=0;char s=getchar();
    while(s<‘0‘||s>‘9‘)s=getchar();
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x;
}
int n,m,c[maxn],son[maxn][maxn],sum[maxn],g[maxn][maxn],f[maxn];
int size[maxn],fa[maxn],ans=0x3f3f3f3f;
vector<int>so[maxn];
void Build(int i)
{
    f[i]=1;
    for(int j=0;j<so[i].size();j++)
      {
          int Son=so[i][j];
          if(f[Son]==0)
            {
                fa[Son]=i;
              son[i][++sum[i]]=Son;
              Build(Son);
          }
      }
}
void Dfs(int i,int num)
{
    int get=0;
    if(num>=ans)return;
    int Sum=0;
    for(int j=1;j<=size[i];j++)
      if(f[fa[g[i][j]]]==0)
        {
          Sum++;
          get=1;
        }
      else f[g[i][j]]=1;
    for(int j=1;j<=size[i];j++)
      {
          if(f[g[i][j]]==0)
            {
                f[g[i][j]]=1;
                Dfs(i+1,num+Sum-1);
                f[g[i][j]]=0;
                for(int k=1;k<=sum[g[i][j]];k++)
                  f[son[g[i][j]][k]]=0;
          }
      }
    if(get==0)
      {
          ans=min(ans,num);
        return;
      }
}
int main()
{
    n=init();m=init();
    int x,y;
    c[1]=1;
    for(int i=1;i<=m;i++)
      {
          x=init();y=init();
        so[x].push_back(y);
        so[y].push_back(x);
      }
    Build(1);
    memset(f,0,sizeof(f));
    size[1]=1;g[1][1]=1;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=sum[i];j++)
        {
          int t=c[i]+1;
          c[son[i][j]]=t;
          g[t][++size[t]]=son[i][j];
        }
    Dfs(2,1);
    printf("%d\n",ans);
    return 0;
}
/*
看了题解之后的 感觉思路和自己的差不多 只不过这样清晰多了
(好吧 不止清晰 .....100分 -)
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define maxn 310
using namespace std;
int init()
{
    int x=0;char s=getchar();
    while(s<‘0‘||s>‘9‘)s=getchar();
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x;
}
int n,m,Max_c,son[maxn][maxn],sum[maxn],c[maxn];
int ans=0x3f3f3f3f,num=1,f[maxn];
vector<int>so[maxn];
void Build(int i)
{
    f[i]=1;
    for(int j=0;j<so[i].size();j++)
      {
          int Son=so[i][j];
          if(f[Son]==0)
            {
              son[i][++sum[i]]=Son;
              Build(Son);
          }
      }
}
void Dfs(int p)
{
    int get=0;
    if(num>=ans)return;
    int Sum=0;
    for(int i=1;i<=n;i++)
      if(c[i]==p)
        for(int j=1;j<=sum[i];j++)
          {
              get=1;
              c[son[i][j]]=p+1;
              num++;
          }
    num--;
    for(int i=1;i<=n;i++)
      if(c[i]==p+1)
        {
          c[i]=0;
          Dfs(p+1);
          c[i]=p+1;
        }
    num++;
    for(int i=1;i<=n;i++)
      if(c[i]==p+1)
        {
          c[i]=0;num--;
        }
    if(get==0)
      {
          ans=min(ans,num);
        return;
      }
}
int main()
{
    n=init();m=init();
    int x,y;
    c[1]=1;
    for(int i=1;i<=m;i++)
      {
          x=init();y=init();
        so[x].push_back(y);
        so[y].push_back(x);
      }
    Build(1);
    for(int i=1;i<=n;i++)
      for(int j=1;j<=sum[i];j++)
        {
          int t=c[i]+1;
          Max_c=max(Max_c,t);
          c[son[i][j]]=t;
        }
    memset(c,0,sizeof(c));
    c[1]=1;
    Dfs(1);
    printf("%d\n",ans);
    return 0;
}
时间: 2024-10-11 07:05:17

niop 2003 传染病控制 (哎呀我氧化钙 坑了好久的搜索题)的相关文章

noip 2003 传染病控制(历史遗留问题2333)

/*codevs 1091 搜索 几个月之前写的70分 今天又写了一遍 并且找到了错误 */ #include<cstdio> #include<vector> #define maxn 310 using namespace std; int n,m,num,head[maxn],fa[maxn],ans=0x7fffffff,f[maxn]; vector<int>G[maxn],Son[maxn]; struct node{ int v,pre; }e[maxn*

[填坑][主线任务]历年NOIP刷题计划

今天又是喜闻乐见的非考试日,那么今天做点什么呢== 前些日子的主线任务陆陆续续(接近)完成了,好多蒙蔽的没学好的算法都算是入门补坑了 我听学长说,做题的顺序是:NOIP真题->NOIP模拟题->专项练习->杂题 啊哈!最重要的真题我还没做几道呢...于是这两天填填这个坑吧 [NOIP2016 Day1 T2]天天爱跑步 NOIP2016最难的题没有之一QAQ,原来做过一直没过,今天重新听讲解,总算打了出来 [NOIP2015 Day2 T3]运输计划 压轴题防AK,最后一个点及其凶残,并

【不可能的任务22/200】【填坑】bzoj3224 splay裸题

人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题 1 #include <cstdio> 2 int root,N=0,n,p,q; 3 int fa[100001],c[100001][2],size[100001],sp[100001]; 4 void rot(int x) 5 { 6 int y=fa[x],k=(c[y][0]==x); 7 size[y]=size[c[y][k]]+size[c[x][k]]+1;size[x]=size[c[x][!k]]+

Angular2入坑指南——管道(搜索功能)

想必大家做项目都会遇到搜索功能吧,通常都是搜索本地数据,如果通过http去请求后台再回显的话,那响应速度简直叫人抓狂,所以大多数都是先存到本地然后进行搜索回显.Angular1的方法很简单,只需要在input标签加入ng-model,然后再在想要显示数据的标签加上| filter就好了,然而,Angular2移除了filter和orderBy,他们的理由是:感觉filter和orderBy响应很慢.我想问:什么是快?怎么快?达到多少KB/s算快?这就要求我们自己写方法来实现了,但是文档提供的仅仅

CTSC&amp;&amp;APIO2016 旅游记&amp;&amp;被坑记

在帝都将近十天,回家之际,有一丝急迫,也有一丝眷恋. 5.1 CTSC day0 坐前一天晚上的火车,很早就到达了北京,倒了3班地铁+一班公交到达了目的地,被yts大爷领着绕了一个大圈才到宾馆,累成狗. 宾馆很高级,房间里面有70元一瓶的水,冰箱里还有各种饮料(当然是喝不起的啦),床软的可怕.睡了1个小时,人还是虚的,背了一点板子. 中午被叫去吃饭,要走3里地才能到学校,这时候的我已经累得比狗还狗了,饭菜有点可怕,只有4道菜,感觉就是在食堂里吃的盒饭,顿时对这几天绝望了.回到酒店,一想到过一会儿

NOIP 2003解题报告

第一题(神经网络): 题目大意,给出一些点,每个点都有2个值,c和u,给出一些有向边,权值为w.入度为0的点的c已知,其它点的c未知,每个入度不为0的点node的c等于sum(c[k]*w[k][node]),k为与它相连(有向边指向node)的点.求所有出度为0且c>0的点. 解题过程: 此题的方法应该很多,比如拓扑排序,BFS等:我直接写了个递归,要求某个点的c,就先访问所有与它相连的点,递归下去直到 碰到入度为0的点.. 较麻烦的送分题,30分钟AC 第二题(侦探推理): 明明同学最近迷上

微信支付官方SDK V3 .NET版的坑

我觉得玩微信支付最大的难点和瓶颈并不是微信支付本身,而是能够拿到微信支付的权限.首先微信支付所面向的开发对象不是个人,所以个人开发者不会有这样的权限,另外一方面公司的微信号又不会随便给个人进行开发,这样就陷入了一个比较尴尬的循环! 在好不容易搞到权限后,发现官方的sdk里面竟然有.NET版本,这让小猪欣喜如狂,赶紧下下来研究一番.这也就有了本文. 在设置好开发环境,测试白名单,,回调…确定微信后台设置已经没有问题之后. 接下来看.NET版本中的坑 默认Default.aspx中的链接竟然都是链接

记一次 jquery mobile被AJAX坑了。

简单情况是 MVC 重定向,URL不变 试了N种方式,跳来跳去,无解,服务端跳,写JS跳,生成跳转中间页跳.失败 后来一看,明明已经跳到新页了,样式什么还是原页的,有点火大了. 出去溜一圈,喝杯水,和同事东拉西扯一通. 回头一看,突然反应过来,这不是AJAX的效果么,坑我半个多小时. 为加验证,是手动调用的submit.没往AJAX上想. $("form").submit(); 但jquery mobile 内部会把submit也通过AJAX访问. 解决办法是禁用. 注意 绑定mobi

你在使用assetbundle时可能遇到的坑【转】

在公司项目开发中,用到了assetbundle,由于是webplayer不像手机,流量限制几乎没有,所以场景都是用assetbundle打包后动态加载的,但是这个过程中,遇到不少坑: 1.Editor版本不能读取与自己版本不同的assetbundle 这个问题描述起来很简单:比如:老板原来让你用4.1打包(BuildAssetBundle)开发,开发完毕后,下半年,unity升级了,于是老板要求与时俱进,让你用4.3开发维护,这时,问题就出现了:4.1下的editor打包的assetbundle