zoukankan      html  css  js  c++  java
  • 車的放置

    (AcWing)

    题意:给定一个(N)(M)列的棋盘,已知某些格子禁止放置.问棋盘上最多能放多少个不能互相攻击的車.車放在格子里,攻击范围与中国象棋的“車”一致.(N,M<=200.)

    分析:二分图的难点往往是分析如何建图,即如何根据题意,挖掘性质,构建出一个二分图.

    二分图匹配模型的两个要素:

    "(0)要素":节点分成两个独立的集合,每个集合内部(0)条边.

    "(1)要素":每个节点只能与(1)条匹配边相连.

    本题中,我们把行,列看作节点,共(n+m)个节点.

    一个車,肯定不能既出现在第(i)行又出现在第(j)行(列也一样),所以符合两个集合内部的"0要素".

    而每行每列都只能放(1)个車(否则就会互相攻击),符合"1要素".

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<map>
    #include<set>
    #define ll long long
    using namespace std;
    inline int read(){
        int x=0,o=1;char ch=getchar();
        while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
        if(ch=='-')o=-1,ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*o;
    }
    const int N=405;
    const int M=200005;
    int n,m,t,ans,bj[M],visit[N],match[N];
    int tot,head[N],nxt[M],to[M];
    inline void add(int a,int b){
    	nxt[++tot]=head[a];head[a]=tot;to[tot]=b;
    }
    inline bool dfs(int x){
    	for(int i=head[x];i;i=nxt[i]){
    		int y=to[i];
    		if(!visit[y]){
    			visit[y]=1;
    			if(!match[y]||dfs(match[y])){
    				match[y]=x;return true;
    			}
    		}
    	}
    	return false;
    }
    int main(){
    	n=read();m=read();t=read();
    	for(int i=1;i<=t;++i){
    		int x=read(),y=read();
    		bj[(x-1)*m+y]=1;//标记不能放的格子
    	}
    	for(int i=1;i<=n;++i)
    		for(int j=1;j<=m;++j){
    			if(!bj[(i-1)*m+j])add(i,j+n),add(j+n,i);//建图,记得j要加上n			
    		}
    	for(int i=1;i<=n;++i){
    		memset(visit,0,sizeof(visit));
    		if(dfs(i))++ans;
    	}
    	printf("%d
    ",ans);
        return 0;
    }
    
    
  • 相关阅读:
    [sql]在case语句中不同情况下then的数据的数据类型不一致ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
    环境迁移 小记
    linux下安装oracle遇到的问题
    正向代理与反向代理
    文件夹与SVN脱离关系
    shell 脚本中$$,$#,$?
    在MySQL中单列索引和联合索引的区别
    Java中Map、HashMap、LinkedHashMap、TreeMap的区别
    Error、Exception与RuntimeException的区别
    设计模式--单例模式
  • 原文地址:https://www.cnblogs.com/PPXppx/p/11598239.html
Copyright © 2011-2022 走看看