• 2017国家集训队作业[agc016e]Poor Turkey


    2017国家集训队作业[agc016e]Poor Turkey

    题意:

    一开始有(N)只鸡是活着的,有(M)个时刻,每个时刻有两个数(X_i,Y_i),表示在第(i)个时刻在(X_i,Y_i)之中选出一只还活着的鸡乃伊组特,如果两只鸡在这之前就已经被干掉,保持原状。问:(M)个时刻后有多少对鸡可能同时存活?((Nleq400,Mleq 10^5)

    题解:

    容易发现一只鸡在每一个决策中不被选中的必要条件,就是要么这个决策没有它这个选项,要么就是另一只鸡在此之前也没有被乃伊组特掉,那另一只鸡在此之前也要满足这个条件。然后每一只鸡对应了一只集合,两只鸡能同时存活当且仅当它们各自的集合没有冲突,两个集合间没有交集。(冲突是指计算集合时,存在一只集合中的鸡被计算了两次。)数据范围较小,瞎搞即可。(然而在场上花5分钟打了个假的,获得了一分的好成绩,成功突出!)

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define eps 1e-8
    #define fo(i,l,r) for(int i=l;i<=r;i++)
    #define of(i,l,r) for(int i=l;i>=r;i--)
    using namespace std;
    
    inline int rd()
    {
        int x=0,f=1;
        char ch=getchar();
        for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
        for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
        return x*f;
    }
    const int N=410,M=100010;
    struct kill{int x,y;}a[M];
    int n,m;
    bool S[N][N],f[N];
    
    inline bool gao(int u)
    {
    	S[u][u]=1;
    	of(i,m,1){
    		int x=a[i].x,y=a[i].y;
    		if(S[u][x]&&S[u][y])return 0;
    		if(S[u][x]||S[u][y])S[u][x]=S[u][y]=1;
    	}
    	return 1;
    }
    
    int main()
    {
    	#ifndef ONLINE_JUDGE
    	freopen("in.txt","r",stdin);
    	#endif
    	n=rd();m=rd();
    	fo(i,1,m)a[i].x=rd(),a[i].y=rd();
    	fo(i,1,n)f[i]=gao(i);
    	int ans=0;
    	fo(i,1,n-1){
    		if(!f[i])continue;
    		fo(j,i+1,n){
    			if(!f[j])continue;
    			bool flag=1;
    			fo(k,1,n)if(S[i][k]&&S[j][k]){flag=0;break;}
    			ans+=flag;
    		}
    	}
    	printf("%d
    ",ans);
        return 0;
    }
    
    
  • 相关阅读:
    在Unity中实现屏幕空间阴影(2)
    在Unity中实现屏幕空间阴影(1)
    在Unity中实现屏幕空间反射Screen Space Reflection(4)
    在Unity中实现屏幕空间反射Screen Space Reflection(3)
    在Unity中实现屏幕空间反射Screen Space Reflection(2)
    在Unity中实现屏幕空间反射Screen Space Reflection(1)
    AFO
    链接
    网络流24题
    本蒟蒻博客声明
  • 原文地址:https://www.cnblogs.com/JackyhhJuRuo/p/9531797.html
Copyright © 2020-2023  润新知