zoukankan      html  css  js  c++  java
  • 0x20 搜索

    这里基本就是入门吧。

    可达性统计 用bitset搞的判重,发现这东西是真好用哈,空间还小

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<map>
    #include<bitset>
    using namespace std;
    
    map<int,bool>mp[31000];
    struct node
    {
        int x,y,next;
    }a[31000];int len,last[31000];
    void ins(int x,int y)
    {
        len++;
        a[len].x=x;a[len].y=y;
        a[len].next=last[x];last[x]=len;
    }
    
    int top,sta[31000];
    int ru[31000];
    bitset<30010>s[31000];
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        len=0;memset(last,0,sizeof(last));
        memset(ru,0,sizeof(ru));
        for(int i=1;i<=m;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            if(mp[x][y]==false)
            {
                ins(y,x);ru[x]++;
                mp[x][y]=true;
            }
        }
        
        top=0;
        for(int i=1;i<=n;i++)
        {
            if(ru[i]==0)sta[++top]=i;
            s[i][i]=1;
        }
        while(top!=0)
        {
            int x=sta[top];top--;
            for(int k=last[x];k;k=a[k].next)
            {
                int y=a[k].y;
                ru[y]--;s[y]|=s[x];
                if(ru[y]==0)
                    sta[++top]=y;
            }
        }
        for(int i=1;i<=n;i++)printf("%d
    ",s[i].count());
        return 0;
    }
    可达性统计

    小猫爬山 就冲着Freda和rainbow这口狗粮随便写了。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<map>
    #include<bitset>
    using namespace std;
    
    int n,W,mmin;
    int c[20],d[20];
    void dfs(int k,int sp)
    {
        if(sp>=mmin)return ;
        if(k==n+1)
        {
            mmin=sp;
            return ;
        }
        for(int i=1;i<=sp;i++)
            if(d[i]+c[k]<=W)
            {
                d[i]+=c[k];
                dfs(k+1,sp);
                d[i]-=c[k];
            }
        d[sp+1]=c[k];
        dfs(k+1,sp+1);
    }
    int main()
    {
        scanf("%d%d",&n,&W);
        for(int i=1;i<=n;i++)scanf("%d",&c[i]);
        d[1]=0;mmin=n;dfs(1,1);
        printf("%d
    ",mmin);
        return 0;
    }
    小猫爬山

    数独那题不大想做啊。

  • 相关阅读:
    编程语言
    MySQL之常用函数
    Java常用工具类
    数据结构
    Java对接SAP平台接口
    Maven项目依赖管理工具
    Java设计模式--抽象工厂
    Java基础--抽象类与接口
    Java集合--ArrayList遍历删除元素
    Java注解(Annotation )--结合拦截器实现是否登录验证
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/9263175.html
Copyright © 2011-2022 走看看