• ZOJ3321,ZOJ3317


    ZOJ3321

    //there is at most one edge between two nodes.
    因为这句话的局限性,又要满足环,那么一定是每个点度为2,然后为n节点的一个环

    //#include <bits/stdc++.h>
    #include<cstdio>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    
    //there is at most one edge between two nodes.
    
    const int N=20;
    int ma[N][N],n,m,out[N];
    bool flag,vis[N];
    
    void DFS(int u,int num)
    {
        if(flag)
            return;
        for(int i=1;i<=n;i++)
        {
            if(ma[u][i]&&num==n&&i==1)
            {
                flag=true;
                return;
            }
            if(ma[u][i]&&!vis[i])
            {
                vis[i]=true;
                DFS(i,num+1);
            }
        }
    }
    
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            int u,v;
            memset(ma,0,sizeof(ma));
            memset(out,0,sizeof(out));
            while(m--)
            {
                scanf("%d%d",&u,&v);
                ma[u][v]=ma[v][u]=1;
                out[u]++;
                out[v]++;
            }
            bool ff=true;
            for(int i=1;i<=n;i++)
            {
                if(out[i]!=2)
                {
                    ff=false;
                    break;
                }
            }
            if(!ff)
            {
                puts("NO");
                continue;
            }
            memset(vis,false,sizeof(vis));
            flag=false;
            vis[1]=true;
            DFS(1,1);
            if(flag)
                puts("YES");
            else
                puts("NO");
        }
        return 0;
    }
    

    ZOJ3317

    题意:
    租的人,房子数量。
    n行进入时间,出去时间。
    每次进入有房间则给一个房间,按房间编号从小到大租出。
    求每个进入的人的房间号。
    思路:
    离线处理。

    先把每个人按照进入时间排序,每次从小到大枚举m个房间有没有人居住。

    //#include <bits/stdc++.h>
    #include<cstdio>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    
    const int N=1e2+10;
    struct asd{
        int u,v;
        int id;
    };
    asd q[N];
    int n,m,ans[N];
    
    bool cmp(asd x,asd y)
    {
        if(x.u==y.u)
            return x.id<y.id;
        return x.u<y.u;
    }
    
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            if(!n&&!m) break;
            int u,v;
            bool flag;
            for(int i=1;i<=n;i++)
            {
                scanf("%d%d",&u,&v);
                q[i].id=i;
                q[i].u=u;
                q[i].v=v;
            }
            sort(q+1,q+n+1,cmp);
            memset(ans,0,sizeof(ans));
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    flag=true;
                    for(int k=1;k<i;k++){
                        if(ans[q[k].id]==j && q[k].v>q[i].u){
                            flag=false;break;
                        }
                    }
                    if(flag)
                    {
                    	ans[q[i].id]=j;
                    	break;
    				}
    
                }
            }
            for(int i=1;i<=n;i++)
                printf("%d
    ",ans[i]);
        }
        return 0;
    }
    


  • 相关阅读:
    01分数规划基本类型
    hdu3976
    hdu1430 康托展开+bfs预处理
    模板
    模板
    redis初始
    mybatis12
    mybatis13
    mybatis10
    springmvc10
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777436.html
Copyright © 2020-2023  润新知