第一次发文,就是一些学习的心得而已,自己忘得时候就可以来看看,好了废话不多说,直接说说这题的思路。

题意大概是每列只能射中一个白格子,每行可以射多个,让你输出这样的序列,明显的二分图求匹配,用列去选行就可以了,但是列有可能比行数大,所以就分两种情况。只有匹配值等于行数才有解,不然无解,当列数大于行数时在得到的序列尾部加点东西就好了(再多余出的列里每列随便选个白格子)

上代码,刚开始是用vector建的图,然后叫上去就报运行错误,找了好久没发现错误,一气之下改成矩阵直接撸........=。=

  #include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#define maxn 1050 using namespace std; int link[maxn],vis[maxn];
int g[maxn][maxn];
int r,c; int dfs(int x)
{
for(int i=;i<=r;i++)
{
if(g[x][i]&&!vis[i])
{
vis[i]=;
if(link[i]==-||dfs(link[i]))
{
link[i]=x;
return ;
}
}
}
return ;
}
void solve()
{
int sum=;
memset(link,-,sizeof(link));
for(int i=;i<=r;i++)
{
memset(vis,,sizeof(vis));
if(dfs(i)) sum++;
}
// printf("%d\n",sum);
if(sum==r)
{
for(int j=;j<r;j++)
printf("%d ",link[j]);
printf("%d",link[r]);
for(int k=r+;k<=c;k++)
{
for(int l=;l<=r;l++)
{
if(g[l][k])
{
printf(" %d",l);
break;
}
}
}
puts("");
}
else puts("NO");
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&r,&c);
memset(g,,sizeof(g));
for(int i=;i<=c;i++)
{
int a,b;
scanf("%d %d",&a,&b);
g[a][i]=g[b][i]=;
}
solve();
}
return ;
}

#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#define maxn 1050

using namespace std;

int link[maxn],vis[maxn];
int g[maxn][maxn];
int r,c;

int dfs(int x)
{
for(int i=1;i<=r;i++)
{
if(g[x][i]&&!vis[i])
{
vis[i]=1;
if(link[i]==-1||dfs(link[i]))
{
link[i]=x;
return 1;
}
}
}
return 0;
}
void solve()
{
int sum=0;
memset(link,-1,sizeof(link));
for(int i=1;i<=r;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i)) sum++;
}
// printf("%d\n",sum);
if(sum==r)
{
for(int j=1;j<r;j++)
printf("%d ",link[j]);
printf("%d",link[r]);
for(int k=r+1;k<=c;k++)
{
for(int l=1;l<=r;l++)
{
if(g[l][k])
{
printf(" %d",l);
break;
}
}
}
puts("");
}
else puts("NO");
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&r,&c);
memset(g,0,sizeof(g));
for(int i=1;i<=c;i++)
{
int a,b;
scanf("%d %d",&a,&b);
g[a][i]=g[b][i]=1;
}
solve();
}
return 0;
}

POJ1719二分匹配的更多相关文章

  1. POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24081   Accepted: 106 ...

  2. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  3. BZOJ 1189 二分匹配 || 最大流

    1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1155  Solved: 420[Submi ...

  4. Kingdom of Obsession---hdu5943(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...

  5. poj 2060 Taxi Cab Scheme (二分匹配)

    Taxi Cab Scheme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5710   Accepted: 2393 D ...

  6. [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  7. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  8. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...

  9. UVA5874 Social Holidaying 二分匹配

    二分匹配简单题,看懂题意,建图比较重要. #include<stdio.h> #include<string.h> #define maxn 1100 int map[maxn ...

随机推荐

  1. 洪水 Pow

    Description AKD市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD市全被水淹没了.Blue Mary,AKD市的市长,召集了他的所有顾问(包括你)参加一个紧急会议.经过细致的商 ...

  2. iOS开发 - Protocol协议及委托代理(Delegate)

    因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但具体怎 ...

  3. (转)VC得到可用的串口列表

    //枚举串口 //参数:bEnablePort,哪个串口有效,bEnablePort[0]表示COM1,bEnablePort[n-1]表示COMn //返回值:有效的串口个数 int EnumAll ...

  4. GoAccess安装和使用介绍

    使用文档参考地址:https://my.oschina.net/mrco/blog/181737https://www.fanhaobai.com/2017/06/go-access.html goa ...

  5. SQL server的一个分割表值函数

    CREATE FUNCTION [dbo].[Fn_Split] ( @SplitString text, -- 如果要传入NText类型,下面需要相应的修改,注释行为NText下同 ) = ','- ...

  6. db2疑难解决

    http://www-01.ibm.com/support/knowledgecenter/?lang=zh#!/SSEPGG_9.5.0/com.ibm.db2.luw.messages.sql.d ...

  7. NPM下载模块包说明

    博主对npm包安装收集了各种资料和实践后对它们之间的差异整理,写下这篇文章避免自己忘记,同时也给node.js猿友一点指引. 我们在使用 npm install 安装模块的模块的时候 ,一般会使用下面 ...

  8. javaweb基础(9)_Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  9. 点击按钮在表格的某一行下,在添加一行(HTML+JS)

    使用js在指定的tr下添加一个新的一行newTr html代码: <table> <tr> <td>用户名:</td> <td><in ...

  10. 在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串

      1.在<connectionStrings> 标签里添加连接 <connectionStrings> <add name="ConnectionName&q ...