标签: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