二分图水题三发

POJ1274 The Perfect Stall

题目大意:n个奶牛m个仓库,每个奶牛都有喜欢的仓库,当然一个奶牛只能住进一个仓库

,一个仓库也只能让一个奶牛吃,问最多有多少奶牛能住进喜欢的仓库

思路:裸的匹配 练下模板

//poj1274

#include <stdio.h>

#include <iostream>

#include<queue>

#include <string.h>

#include <algorithm>

#define maxn 10009

#define maxm 10001

#define esp 0.001

using namespace std;

int head[maxn],point[maxn],next[maxn],now,match[maxn];

bool visit[maxn];

void add(int x,int y)

{

next[++now]=head[x];

head[x]=now;

point[now]=y;

}

int dfs(int k)

{

for(int i=head[k];i;i=next[i])

{

int u=point[i];

if(visit[u]==0)

{

visit[u]=1;

if(match[u]==-1 || dfs(match[u]))

{

match[u]=k;

return 1;

}

}

}

return 0;

}

int main()

{

int n,m;

while(scanf("%d%d",&n,&m)!=EOF)

{

int ans=0,nn,x;

now=0;

memset(head,0,sizeof(head));

for(int i=1;i<=n;i++)

{

scanf("%d",&nn);

for(int j=1;j<=nn;j++)

{

scanf("%d",&x);

add(i,x);

}

}

memset(match,-1,sizeof(match));

for(int i=1;i<=n;i++)

{

memset(visit,0,sizeof(visit));

if(dfs(i)==1)ans++;

}

printf("%d\n",ans);

}

return 0;

}

poj 2239 Selecting Courses

题目大意:一个人要选课,一周有n节课,每节课要在一周的某些时间上,问最多能选多

少课

同样很裸的匹配。。。可能边出太大 C++ AC G++ WA

//poj2239

#include <stdio.h>

#include <iostream>

#include<queue>

#include <string.h>

#include <algorithm>

#define maxn 10000000

#define maxm 10001

#define esp 0.001

using namespace std;

int head[300],point[maxn],next[maxn],now,match[300];

bool visit[300];

void add(int x,int y)

{

next[++now]=head[x];

head[x]=now;

point[now]=y;

}

int dfs(int k)

{

for(int i=head[k];i;i=next[i])

{

int u=point[i];

if(!visit[u])

{

visit[u]=1;

if(match[u]==-1||dfs(match[u]))

{

match[u]=k;

return 1;

}

}

}

return 0;

}

int main()

{

int n,nn,x,y;

while(scanf("%d",&n)!=EOF)

{

now=0;

memset(head,0,sizeof(head));

for(int j=1;j<=n;j++)

{

scanf("%d",&nn);

for(int i=1;i<=nn;i++)

{

scanf("%d%d",&x,&y);

add(j,(x-1)*12+y);

}

}

memset(match,-1,sizeof(match));

int ans=0;

for(int i=1;i<=n;i++)

{

memset(visit,0,sizeof(visit));

if(dfs(i)==1)ans++;

}

printf("%d\n",ans);

}

return 0;

}

题目大意:n*m的矩阵,某些格子有水,要用1*k(k随便)的木板盖住水,并且不能盖住没

有水的青草部分

思路:和上海邀请赛几乎一样的建图,乱搞一通就可以

//poj2226

#include <stdio.h>

#include <iostream>

#include<queue>

#include <string.h>

#include <algorithm>

#define maxn 900

#define maxm 50090

#define esp 0.001

using namespace std;

int head[maxn],point[maxm],next[maxm],now=0,match[maxn];

int map[maxn][maxn];

bool visit[maxn];

char ch[maxn];

void add(int x,int y){

next[++now]=head[x];head[x]=now;point[now]=y;

}

int dfs(int k){

for(int i=head[k];i;i=next[i])if(!visit[point[i]]){

int u=point[i];visit[u]=1;

if(match[u]==-1||dfs(match[u])){

match[u]=k;return 1;

}

}

return 0;

}

int main()

{

int n,m,h=0,g=0,ans=0;

scanf("%d%d",&n,&m);

for(int i=1;i<=n;i++){

scanf("%s",ch+1);

for(int j=1;j<=m;j++)

if(ch[j]==‘*‘)map[i][j]=(map[i][j-1]==0)?++h:map[i][j-1];

}

for(int i=1;i<=m;i++)

for(int j=1;j<=n;j++)

if(map[j][i]!=0)

add(map[j][i],map[j-1][i]==0?++g:g);

memset(match,-1,sizeof(match));

for(int i=1;i<=h;i++){

memset(visit,0,sizeof(visit));if(dfs(i))ans++;

}

printf("%d\n",ans);

return 0;

}

时间: 2024-11-06 10:52:25

二分图水题三发的相关文章

Courses(二分图水题)

Courses Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1083 Description Consider a group of N students and P courses. Each student visits zero, one or more than one courses. Your task is to de

ytu 1064: 输入三个字符串,按由小到大的顺序输出(水题,字符串处理)

1064: 输入三个字符串,按由小到大的顺序输出Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 471  Solved: 188[Submit][Status][Web Board] Description 输入三个字符串,按由小到大的顺序输出.分别使用指针和引用方式实现两个排序函数.在主函数中输入和输出数据. Input 3行字符串 Output 按照从小到大输出成3行.由指针方式实现. 按照从小到大输出成3行.由引用方式实现. Sample In

ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

1061: 从三个数中找出最大的数Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][Web Board] Description 定义一个带参的宏(或者模板函数),从三个数中找出最大的数. Input 3个短整型数,空格隔开 3个实数,空格隔开 3个长整数,空格隔开 Output 最大的数,对于实数保留2位小数. Sample Input 1 2 3 1.5 4.7 3.2 123456

POJ 1274--The Perfect Stall【二分图 &amp;&amp; 最大匹配数 &amp;&amp; 水题】

The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20795   Accepted: 9386 Description Farmer John completed his new barn just last week, complete with all the latest milking technology. Unfortunately, due to engineering pr

POJ 2239--Selecting Courses【二分图 &amp;&amp; 最大匹配数 &amp;&amp; 水题】

Selecting Courses Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9363   Accepted: 4164 Description It is well known that it is not easy to select courses in the college, for there is usually conflict among the time of the courses. Li Mi

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

涨姿势题2_水题_两种解法

Problem Description 涨姿势题就是所谓的优化题,在组队赛中,队伍发现了一题水题,那么应该交给谁去处理?作为处理水题的代码手,应该具备什么样的素养?1,要快,水题拼的就是速度!2,不能卡水题!水题都卡,绝对不是一个代码手的风范!3,不能出错,错一次即罚时20分钟,对于水题来讲是致命的!4,要能看出来一题是水题!没有这条,上面三条都是没有意义的! 如果你希望你成团队中一个合格的代码手,那么这套题是你最好的选择,快AC吧! 本系列即是为了提高水题代码手的素养而准备的!水题经常需要用到

HDU 1862 EXCEL排序 (排序水题)

Problem Description Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号.以下有 N 行,每行包含一条学生纪录.每条学生纪录由学号(6位数字,同组测试中没有重复的学号).姓名(不超过8位且不包含空格的字符串).成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开.当读到 N=0 时,全部输入结

【Floyd(并非水题orz)】BZOJ4093-[Usaco2013 Dec]Vacation Planning

最近刷水太多标注一下防止它淹没在silver的水题中--我成为了本题,第一个T掉的人QAQ [题目大意] Bovinia设计了连接N (1 < = N < = 20,000)个农场的航班.对于任何航班,指定了其中的k个农场作为枢纽. (1 < = K <= 200 , K < = N). 目前,共有M种单向航班( 1 < = M < = 20,000 ),第i个航班从农场u_i至农场v_i花费d_i ( 1 < = d_i < =10,000 )美元.