标签:des style blog http color os io strong
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 15079 | Accepted: 8240 |
Description
Input
Output
Sample Input
3 4 1 1 1 3 2 2 3 2
Sample Output
2
Hint
Source
题目大意:
给你N*N的格子,有很多X,告诉你位置,你可以横向消除或者纵向消除一行,问你最小几次。
解题代码:最小点覆盖,二部图可以解,将二部图构造成网络流求解。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
const int INF=(1<<30);
const int maxn=1100,maxm=1100000;
struct edge{
int u,v,f,next;
edge(int u0=0,int v0=0,int f0=0){
u=u0;v=v0;f=f0;
}
}e[maxm];
int src,sink,cnt,head[maxn];
void adde(int u,int v,int f){
e[cnt].u=u,e[cnt].v=v,e[cnt].f=f,e[cnt].next=head[u],head[u]=cnt++;
e[cnt].u=v,e[cnt].v=u,e[cnt].f=0,e[cnt].next=head[v],head[v]=cnt++;
}
void init(){
cnt=0;
memset(head,-1,sizeof(head));
}
queue <int> q;
bool visited[maxn];
int dist[maxn];
void bfs(){
memset(dist,0,sizeof(dist));
while(!q.empty()) q.pop();
visited[src]=true;
q.push(src);
while(!q.empty()){
int s=q.front();
q.pop();
for(int i=head[s];i!=-1;i=e[i].next){
int d=e[i].v;
if(e[i].f>0 && !visited[d]){
q.push(d);
dist[d]=dist[s]+1;
visited[d]=true;
}
}
}
}
int dfs(int u,int delta){
if(u==sink) return delta;
else{
int ret=0;
for(int i=head[u];delta && i!=-1;i=e[i].next){
if(e[i].f>0 && dist[e[i].v]==dist[u]+1){
int d=dfs(e[i].v,min(e[i].f,delta));
e[i].f-=d;
e[i^1].f+=d;
delta-=d;
ret+=d;
}
}
return ret;
}
}
int maxflow(){
int ret=0;
while(true){
memset(visited,false,sizeof(visited));
bfs();
if(!visited[sink]) return ret;
ret+=dfs(src,INF);
}
return ret;
}
bool a[510][510];
int n,m;
void input(){
init();
src=0;sink=2*n+1;
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
a[i][j]=false;
int x,y;
for(int i=0;i<m;i++){
scanf("%d%d",&x,&y);
a[x][y]=true;
}
}
void solve(){
for(int i=1;i<=n;i++) adde(src,i,1);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]){
adde(i,j+n,1);
}
}
}
for(int i=1;i<=n;i++) adde(i+n,sink,1);
printf("%d\n",maxflow());
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
input();
solve();
}
return 0;
}
POJ 3041 Asteroids (图论-最小点覆盖),布布扣,bubuko.com
标签:des style blog http color os io strong
原文地址:http://blog.csdn.net/a1061747415/article/details/38402491