• Luogu P2055 [ZJOI2009]假期的宿舍


    这个建图真玄.jpg

    简直是常识题

    然而我常识不足QwQ

    话说题解里的代码在我看来不美观所以抄不了题解 于是debug一个小时QwQ

    给萌新一点活路吧

    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    
    int t,n,in[55],back[55],head[55],vis[55],match[55],cnt;
    
    vector<int> pp,bed;
    
    struct edge{
    	int v,next;
    }e[100005];
    
    inline void add(int u,int v){
    	e[++cnt].v=v;
    	e[cnt].next=head[u];
    	head[u]=cnt;
    }
    
    inline bool dfs(int u){
    	for(int i=head[u];i!=-1;i=e[i].next){
    		int v=e[i].v;
    		if(!vis[v]){
    			vis[v]=1;
    			if(match[v]==-1||dfs(match[v])){
    				match[v]=u;
    				return 1;
    			}
    		}
    	}
    	return 0;
    }
    
    int main(){
    	scanf("%d",&t);
    	while(t--){
    		memset(head,-1,sizeof(head));
    		memset(match,-1,sizeof(match));
    		pp.clear();bed.clear();
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++)scanf("%d",&in[i]);
    		for(int i=1;i<=n;i++){
    			scanf("%d",&back[i]);
    			if(in[i])bed.push_back(i);
    			if(!in[i]||!back[i])pp.push_back(i);
    		}
    		for(int i=1;i<=n;i++){
    			if(in[i]&&!back[i])add(i,i);//if要加 
    			for(int j=1;j<=n;j++){
    				int x;
    				scanf("%d",&x);
    				if(x){
    					if(in[i]&&(!in[j]||!back[j]))add(i,j);
    					if(in[j]&&(!in[i]||!back[i]))add(j,i);
    				}
    			}
    		}
    		int tot=0;
    		for(int i=0;i<=bed.size()-1;i++){
    			memset(vis,0,sizeof(vis));
    			tot+=dfs(bed[i]);
    		}
    		if(tot==pp.size())printf("^_^
    ");
    		else printf("T_T
    ");
    	}
    }
    
  • 相关阅读:
    Winform—C#读写config配置文件
    C# 中Web.config文件的读取与写入
    Redis配置文件详解
    三层架构之泛型抽象
    Linq To Sql语法及实例大全
    junit单元测试(keeps the bar green to keeps the code clean)
    观 GT Java语言管理系统的感悟
    java考核完的心得
    15个C++项目列表
    C++文件操作(fstream)
  • 原文地址:https://www.cnblogs.com/Y15BeTa/p/11324413.html
Copyright © 2020-2023  润新知