zoukankan      html  css  js  c++  java
  • codevs 2494 Vani和Cl2捉迷藏

    /*
    一开始大意了 以为和bzoj上的祭祀是一样的(毕竟样例都一样)
    这里不知相邻的点可以相互到达 间接相连的也可以到达
    所以floyed先建立一下关系 再跑最大独立集
    下面贴一下95 和 100的代码
    (认真读题保平安) 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 210
    #define maxm 30010
    using namespace std;
    int n,m,head[maxn],num,ans,match[maxn];
    bool f[maxn];
    struct node
    {
        int u,v,pre;
    }e[maxm];
    void Add(int from,int to)
    {
        num++;
        e[num].u=from;
        e[num].v=to;
        e[num].pre=head[from];
        head[from]=num;
    }
    int Dfs(int s)
    {
        for(int i=head[s];i;i=e[i].pre)
          {
              int v=e[i].v;
              if(f[v]==0)
                {
                    f[v]=1;
                    if(match[v]==0||Dfs(match[v]))
                      {
                          match[v]=s;
                          return 1;
                  }
              }
          }
        return 0;
    }
    int main()
    {
        scanf("%d%d",&n,&m);int x,y;
        for(int i=1;i<=m;i++)
          {
              scanf("%d%d",&x,&y);
              Add(x,y);
          }
        for(int i=1;i<=n;i++)
          {
              memset(f,0,sizeof(f));
              ans+=Dfs(i);
          }
        int p=n-ans;
        printf("%d
    ",p);
        return 0;
    }
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 210
    using namespace std;
    int n,m,g[maxn][maxn],ans,match[maxn];
    bool f[maxn];
    int Dfs(int s)
    {
        for(int i=1;i<=n;i++)
          if(f[i]==0&&g[s][i]==1)
            {
              f[i]=1;
              if(match[i]==0||Dfs(match[i]))
                {
                  match[i]=s;
                  return 1;
                }
            }
        return 0;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        int x,y;ans=n;
        for(int i=1;i<=m;i++)
          {
              scanf("%d%d",&x,&y);
              g[x][y]=1;
          }
        for(int k=1;k<=n;k++)
          for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
              g[i][j]=g[i][j]||(g[i][k]&&g[k][j]);
        for(int i=1;i<=n;i++)
          {
              memset(f,0,sizeof(f));
              ans-=Dfs(i);
          }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    Thymeleaf学习记录(6)--迭代及条件语法
    Thymeleaf学习记录(5)--运算及表单
    Thymeleaf学习记录(4)--$/*/#/@语法
    Thymeleaf学习记录(3)--语法
    Thymeleaf学习记录(2)--自动编译设置
    ssh和scp详解
    持续集成(Continuous integration)
    部署基于python语言的WEB发布环境
    python垃圾回收机制(Garbage collection)
    Dockerfile定制镜像
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5633169.html
Copyright © 2011-2022 走看看