poj 3041 Asteroids
来源:互联网 发布:擦除软件 编辑:程序博客网 时间:2024/06/05 15:46
最大匹配
#include<iostream>#include<sstream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<map>#include<set>#include<string>#include<vector>#include<algorithm>using namespace std;#define inf 0x7ffffff#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define max_n 100005#define mod 1000000007#define FOR(i,s,t) for(int i=(s);i<=(t);++i)int V;//顶点数int N,K;int R[max_n],C[max_n];vector<int >G[max_n];int match[max_n];//所匹配的顶点bool used[max_n];//dfs中的标记数组void add_edge(int u,int v){ G[u].push_back(v); G[v].push_back(u);}bool dfs(int v){ used[v]=1; for(int i=0;i<G[v].size();i++) { int u=G[v][i],w=match[u]; if(w<0 || !used[w] && dfs(w)){ match[v]=u; match[u]=v; return 1; } } return 0;}int bipartite_matching(){ int res=0; memset(match,-1,sizeof(match)); for(int v=0;v<V;v++){ if(match[v]<0){ memset(used,0,sizeof(used)); if(dfs(v)) res++; } } return res;}int main(){ while(~scanf("%d%d",&N,&K)) { V=2*N; for(int i=0;i<K;i++) { scanf("%d%d",&R[i],&C[i]); add_edge(R[i]-1,N+C[i]-1); } printf("%d\n",bipartite_matching()); }}
0 0
- POJ 3041 Asteroids
- poj 3041 Asteroids
- POJ-3041 Asteroids
- Poj 3041 Asteroids
- poj 3041 Asteroids
- poj 3041 Asteroids
- POJ:3041Asteroids
- poj 3041 Asteroids
- POJ 3041 Asteroids
- POJ 3041 Asteroids
- POJ 3041 Asteroids
- POJ 3041 Asteroids
- POJ 3041 Asteroids
- poj 3041-Asteroids
- POJ 3041 Asteroids
- POJ-3041-Asteroids
- POJ 3041 Asteroids
- POJ 3041 Asteroids
- 函数后面加const
- 利用Fragment实现Tab页
- 面过的那些题
- 求最小的前n个数
- ORACLE 10G imp error: ORA-12899
- poj 3041 Asteroids
- mainActivity
- 2014多校联赛第八场 1008 Number Transformation
- javaweb常用的技术之-----自定义标签制作
- CPU的字节序——大端小端模式详解
- SharePoint 2010 中如何配置同步配置文件
- HTML5边玩边学(6):汽车人,变形......
- tnsnames.ora配置小结
- addActivity