码迷,mamicode.com
首页 > 其他好文 > 详细

poj3401 Asteroids

时间:2018-11-24 14:05:15      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:bsp   dfs   ons   memset   bool   printf   cst   传送门   while   

传送门

 

二分图不想讲

最小点覆盖就行 每个边是一个小行星

Code:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<queue>
 5 #define inf 2147483647
 6 #define ms(a,b) memset(a,b,sizeof a)
 7 #define rep(i,a,n) for(int i = a;i <= n;i++)
 8 #define per(i,n,a) for(int i = n;i >= a;i--)
 9 using namespace std;
10 typedef long long ll;
11 inline int read() {
12     int as = 0,fu = 1;
13     char c = getchar();
14     while(c < 0 || c > 9) {
15         if(c == -) fu = -1;
16         c = getchar();
17     }
18     while(c >= 0 && c <= 9) {
19         as = as * 10 + c - 0;
20         c = getchar();
21     }
22     return as * fu;
23 }
24 const int N = 200005;
25 //head
26 int n,m,ans;
27 int head[N],mo[N<<1],nxt[N<<1],cnt;
28 void add(int x,int y) {
29     mo[++cnt] = y;
30     nxt[cnt] = head[x];
31     head[x] = cnt;
32     return;
33 }
34 int match[N],vis[N];
35 bool dfs(int x,int tm) {
36     for(int i = head[x];i;i = nxt[i]) {
37         int sn = mo[i];
38         if(vis[sn] == tm) continue;
39         vis[sn] = tm;
40         if(!match[sn] || dfs(match[sn],tm)) {
41             match[sn] = x;
42             return 1;
43         }
44     }
45     return 0;
46 }
47 
48 int main() {
49     n = read(),m = read();
50     rep(i,1,m) add(read(),read()+n);
51     rep(i,1,n<<1) ans += dfs(i,i);
52     printf("%d\n",ans);
53     return 0;
54 }

 

poj3401 Asteroids

标签:bsp   dfs   ons   memset   bool   printf   cst   传送门   while   

原文地址:https://www.cnblogs.com/yuyanjiaB/p/10011116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!