poj 2112
来源:互联网 发布:淘宝直通车卡位软件 编辑:程序博客网 时间:2024/06/05 23:05
最开始没有看明白题意.. 没有floyd 各种错 后来又没有更新那个maxans 改了就过了
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
const int MAXN = 502;
const int inf = 0xffffff;
// 二分图匹配,返回最大的匹配数
// linker中保存匹配的关系
int g[MAXN][MAXN];
int n , m;
int linker[MAXN];
bool used[MAXN];
bool DFS ( int a )
{
for ( int i = 0 ; i < m; i ++ )
if ( g[a][i] && !used[i] )
{
used[i] = true ;
if ( linker[i] == -1 || DFS( linker[i] ))
{
linker[i] = a;
return true;
}
}
return false;
}
int hungray ( )
{
int result = 0;
memset ( linker , -1 , sizeof ( linker )) ;
for ( int i = 0 ; i < n; i ++ )
{
memset ( used , 0 , sizeof ( used )) ;
if ( DFS ( i ) )
result ++;
}
return result;
}
int map[MAXN][MAXN];
void floyd ( int s )
{
for ( int k = 0 ; k < s ; k ++ )
for ( int i = 0 ; i < s ; i ++ )
for ( int j = 0 ; j < s ;j ++ )
if ( map[i][j] > map[i][k] + map[k][j] )
map[i][j] = map[i][k] + map[k][j];
}
int main()
{
int k , c , s;
int maxans ;
while ( scanf("%d%d%d" , &k ,&c , &s ) != EOF )
{
maxans = 0;
for ( int i = 0 ; i < k+c ; i ++ )
for ( int j = 0 ; j < k+c ; j ++ )
{
scanf("%d" , &map[i][j] );
if ( map[i][j] > maxans )
maxans = map[i][j];
if ( map[i][j] == 0 )
map[i][j] = inf;
}
floyd ( k+c );
// cout << endl;
// for ( int i = 0 ; i < k+c ; i ++)
// {
//
// for ( int j = 0 ; j < k+c ; j ++ )
//
// cout << map[i][j] << " " ;
// cout << endl;
// }
for ( int i = 0 ; i < k+c ; i ++ )
for ( int j = 0 ; j < k+c ; j ++ )
if ( map[i][j] > maxans )
maxans = map[i][j];
int ans = inf;
//cout << maxans << endl;
int minans = 0;
int node;
while ( minans <= maxans )
{
node = 0;
int mid = ( minans + maxans )/2;
memset ( g, 0 , sizeof ( g ));
for ( int i = 0 ; i < k ; i ++ )
for ( int j = k ; j < k+c ; j ++)
if ( map[i][j] <= mid )
{
for ( int t = 0 ; t < s ; t ++ )
g[i*s+t][j-k] = 1;
}
n = k*s;
m = c;
//cout << hungray () << endl;
if ( hungray() == c )
{
if ( mid < ans ) ans = mid ;//cout << "ans = " << ans << endl;
maxans = mid - 1;
}
//maxans = ans;
else if ( hungray() < c )
minans = mid + 1;
//cout << minans << " ***** " << maxans << endl;
}
printf("%d\n", ans );
}
return 0;
}
/*
2 3 3
0 3 2 1 1
3 0 3 2 0
2 3 0 1 0
1 2 1 0 2
1 0 0 2 0
1 1 1
0 1
1 0
1 2 2
0 2 3
2 0 2
3 2 0
2 1 1
0 2 2
2 0 1
2 1 0
*/
- poj 2112
- poj 2112
- poj 2112
- poj 2112
- POJ 2112 Optimal Milking
- POJ 2112 OPtimal Milking
- poj 2112 网络流
- POJ 2112 Optimal Milking
- POJ 2112 二分+dinic
- poj 2112 Optimal Milking
- POJ-2112-Optimal Milking
- Poj 2112(最大流)
- poj 2112 Optimal Milking
- poj 2112 Optimal Milking
- poj-2112-Optimal Milking
- POJ 2112 Optimal Milking
- POJ 2112 Optimal Milking
- POJ 2112 Optimal Milking
- android 之电话监听
- UVa Problem 10270 Bigger Square Please... (拼接正方形)
- ubuntu 鼠标滚轮太快的现象
- 1459 poj
- 关于NC打印模板的问题
- poj 2112
- LoadRunner检查点函数
- 习惯
- 20个值得开发人员关注的jQuery技术博客
- 第一篇文章
- 九步确定你的人生目标和制定达到目标的计划
- aaaaa
- 再看模板特例定义问题……
- 今天,刺激了