2015年ACM训练二分图
2015-11-26 18:09
302 查看
A -
Asteroids
Time Limit:1000MS
Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit
Status
Description
Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 <= N <= 500). The grid contains K asteroids (1 <= K <= 10,000), which are conveniently located at the lattice points of
the grid.
Fortunately, Bessie has a powerful weapon that can vaporize all the asteroids in any given row or column of the grid with a single shot.This weapon is quite expensive, so she wishes to use it sparingly.Given the location of all the asteroids in the field, find
the minimum number of shots Bessie needs to fire to eliminate all of the asteroids.
Input
* Line 1: Two integers N and K, separated by a single space.
* Lines 2..K+1: Each line contains two space-separated integers R and C (1 <= R, C <= N) denoting the row and column coordinates of an asteroid, respectively.
Output
* Line 1: The integer representing the minimum number of times Bessie must shoot.
Sample Input
Sample Output
该题的原理为二分图中输入点的个数和连线的情况,输出最大的匹配数
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int line[510][510],boy[510],used[510];
int n;
int find(int x)
{
int i;
for(i=1; i<=n; i++)
{
if(line[x][i]==1&&used[i]==0)
{
used[i]=1;
if(boy[i]==0||find(boy[i]))
{
boy[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int i,k,x,y,sum;
cin>>n>>k;
memset(line,0,sizeof(line));
memset(boy,0,sizeof(boy));
memset(used,0,sizeof(used));
for(i=0; i<k; i++)
{
cin>>x>>y;
line[x][y]=1;
}
sum=0;
for(i=1; i<=n; i++)
{
memset(used,0,sizeof(used));
if(find(i))
{
sum++;
}
}
cout<<sum<<endl;
return 0;
}
Asteroids
Time Limit:1000MS
Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit
Status
Description
Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 <= N <= 500). The grid contains K asteroids (1 <= K <= 10,000), which are conveniently located at the lattice points of
the grid.
Fortunately, Bessie has a powerful weapon that can vaporize all the asteroids in any given row or column of the grid with a single shot.This weapon is quite expensive, so she wishes to use it sparingly.Given the location of all the asteroids in the field, find
the minimum number of shots Bessie needs to fire to eliminate all of the asteroids.
Input
* Line 1: Two integers N and K, separated by a single space.
* Lines 2..K+1: Each line contains two space-separated integers R and C (1 <= R, C <= N) denoting the row and column coordinates of an asteroid, respectively.
Output
* Line 1: The integer representing the minimum number of times Bessie must shoot.
Sample Input
3 4 1 1 1 3 2 2 3 2
Sample Output
2
该题的原理为二分图中输入点的个数和连线的情况,输出最大的匹配数
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int line[510][510],boy[510],used[510];
int n;
int find(int x)
{
int i;
for(i=1; i<=n; i++)
{
if(line[x][i]==1&&used[i]==0)
{
used[i]=1;
if(boy[i]==0||find(boy[i]))
{
boy[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int i,k,x,y,sum;
cin>>n>>k;
memset(line,0,sizeof(line));
memset(boy,0,sizeof(boy));
memset(used,0,sizeof(used));
for(i=0; i<k; i++)
{
cin>>x>>y;
line[x][y]=1;
}
sum=0;
for(i=1; i<=n; i++)
{
memset(used,0,sizeof(used));
if(find(i))
{
sum++;
}
}
cout<<sum<<endl;
return 0;
}
相关文章推荐
- div垂直居中
- linux下javac命令需要依赖jar包
- Mac OS 升级系统连接不上WIFI
- 安卓(java)判断文件是否存在
- C++项目调用C#dll项目
- HTTP协议的一些点
- 【Javascript】列表查询页面,简单地保存上一次查询的查询参数
- Java线程的生命周期
- ServletAPI总结
- Asp.net默认配置下,Session莫名丢失的原因及解决
- Android GreenDao介绍和Generator生成表对象代码
- IOS开发之----Xcode非ARC项目中设置部分文件ARC支持
- js保留两位小数的方法
- drawable文件夹详解
- 正计时
- Service使用方法
- java中urlrewrite的配置和使用
- uwp汉堡菜单的实现
- Cesium Language (CZML) 入门2 — CZML Content(CZML的内容)
- Fragment响应返回键