日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

[bzoj1741]穿越小行星群

發(fā)布時(shí)間:2023/10/11 综合教程 92 老码农
生活随笔 收集整理的這篇文章主要介紹了 [bzoj1741]穿越小行星群 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

將每一行/每一列作為一個(gè)點(diǎn),對(duì)于一個(gè)障礙(x,y),要么第x行和第y列的狀態(tài)(是否攻擊)只需要有一個(gè)就可以了,將第x行和第y列連邊,就是二分圖的最小點(diǎn)覆蓋=最大匹配數(shù)。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1005
4 struct ji{
5 int nex,to;
6 }edge[N*20];
7 int E,n,m,x,y,ans,head[N],flag[N],vis[N];
8 void add(int x,int y){
9 edge[E].nex=head[x];
10 edge[E].to=y;
11 head[x]=E++;
12 }
13 int dfs(int k){
14 if (vis[k])return 0;
15 vis[k]=1;
16 for(int i=head[k];i!=-1;i=edge[i].nex){
17 int v=edge[i].to;
18 if ((!flag[v])||(dfs(flag[v]))){
19 flag[v]=k;
20 flag[k]=v;
21 return 1;
22 }
23 }
24 return 0;
25 }
26 int main(){
27 scanf("%d%d",&n,&m);
28 memset(head,-1,sizeof(head));
29 for(int i=1;i<=m;i++){
30 scanf("%d%d",&x,&y);
31 add(x,y+n);
32 add(y+n,x);
33 }
34 for(int i=1;i<=n;i++){
35 memset(vis,0,sizeof(vis));
36 if (!flag[i])ans+=dfs(i);
37 }
38 printf("%d",ans);
39 }

總結(jié)

以上是生活随笔為你收集整理的[bzoj1741]穿越小行星群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。