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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【WC2016】挑战NPC 【带花树】【建图】

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【WC2016】挑战NPC 【带花树】【建图】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

題意:有nnn個球和mmm個筐,每個筐最多放333個球,每個球只能放入特定的一些筐中,在題中給出。構造一種放球的方案使得nnn個球都被放在某個筐中且 球的個數不超過111 的筐的數量盡量大。

m≤100,n≤3mm\leq 100,n\leq 3mm100,n3m

把每個筐拆成 333 個點,并每個筐的三個點兩兩之間連邊。

每個球和可以放的筐的三個點都連上邊。

然后跑一般圖最大匹配。

這樣如果一個筐的333個點被匹配的點不超過111,可以找兩個點自己匹配。

而每個球都可以且必須找一個匹配,所以最終答案是最大匹配?n最大匹配-n?n

一個很坑的地方,最大匹配的時候球不一定都有匹配,輸出方案時會出鍋。解決方法是先從球開始增廣,這樣每個球先找到匹配點,這樣最后一定有匹配。

#include <iostream> #include <cstring> #include <cstdio> #include <cctype> #include <queue> #include <cassert> #define MAXN 1005 #define MAXM 1000005 using namespace std; inline int read() {int ans=0;char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans; } struct edge{int u,v;}e[MAXM]; int head[MAXN],nxt[MAXM],cnt; void addnode(int u,int v) {e[++cnt]=(edge){u,v};nxt[cnt]=head[u];head[u]=cnt; } inline void insert(int u,int v){addnode(u,v),addnode(v,u);} int mat[MAXN],pre[MAXN],col[MAXN],fa[MAXN],N; int idx[MAXN],tot; int find(const int& x){return fa[x]==x? x:fa[x]=find(fa[x]);} queue<int> q; inline int lca(int x,int y) {for (++tot;;swap(x,y))if (x){x=find(x);if (idx[x]==tot) return x;idx[x]=tot,x=pre[mat[x]];} } inline void shrink(int x,int y,int l) {while (find(x)!=l){pre[x]=y,y=mat[x];if (col[y]==2) col[y]=1,q.push(y);if (x==find(x)) fa[x]=l;if (y==find(y)) fa[y]=l;x=pre[y];} } inline int bfs(int s) {for (int i=1;i<=N;i++) pre[i]=col[i]=0,fa[i]=i;col[s]=1;while (!q.empty()) q.pop();q.push(s);while (!q.empty()){int u=q.front();q.pop();for (int i=head[u];i;i=nxt[i]){int v=e[i].v;if (find(u)==find(v)||col[v]==2) continue;if (!col[v]){col[v]=2,pre[v]=u;if (!mat[v]){for (int las;v;v=las)las=mat[pre[v]],mat[v]=pre[v],mat[pre[v]]=v;return 1;}col[mat[v]]=1,q.push(mat[v]);}else{int l=lca(u,v);shrink(u,v,l),shrink(v,u,l);}}}return 0; } int main() {for (int T=read();T;T--){memset(head,0,sizeof(head));memset(nxt,0,sizeof(nxt));cnt=0;memset(mat,0,sizeof(mat));tot=0;memset(idx,0,sizeof(idx));int n,m,e;n=read(),m=read(),e=read();N=3*m+n;for (int i=1;i<=m;i++) insert(i,i+m),insert(i,i+2*m),insert(i+m,i+2*m);for (int i=1;i<=e;i++){int v,u;v=read(),u=read();insert(3*m+v,u);insert(3*m+v,u+m);insert(3*m+v,u+2*m);}int ans=0;for (int i=N;i>=1;i--)if (!mat[i])ans+=bfs(i);printf("%d\n",ans-n);for (int i=3*m+1;i<=N;i++) printf("%d%c",(mat[i]-1)%m+1," \n"[i==N]);}return 0; }

總結

以上是生活随笔為你收集整理的【WC2016】挑战NPC 【带花树】【建图】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 高清国产mv在线观看 | 中文字幕乱码一区二区三区 | 久久久久女教师免费一区 | 亚洲免费av片 | 欧美xxxⅹ性欧美大片 | 涩涩网站入口 | 九色.com| 欧美日韩不卡一区二区三区 | 国产三级精品三级 | 椎名空在线 | 在线播放无码后入内射少妇 | 中韩毛片 | 亚洲五月网 | 97伊人超碰| 国产又爽又黄游戏 | 人妻熟女一区二区三区app下载 | 黄色免费网站在线看 | 人人看人人艹 | 毛片.com| 夜夜爽av福利精品导航 | 国产91大片 | 永久免费无码av网站在线观看 | 尤物国产在线 | 欧美日韩电影一区 | 国产手机在线 | 葵司av在线 | 玩弄白嫩少妇xxxxx性 | 午夜影院性 | 国产一级免费片 | 色性av| 韩国伦理片在线看 | 欧美福利在线 | 色阁av| 亚洲视频一二三区 | 午夜av一区二区三区 | 欧美激情精品久久久久久变态 | www免费视频 | 特大黑人巨人吊xxxx | 毛片无遮挡高清免费观看 | 黄片一区二区 | 亚洲一二三不卡 | 欧美日韩在线一区二区 | 国产精品久久不卡 | 8x国产一区二区三区精品推荐 | 色鬼综合 | 亚洲骚片 | 久久久999成人 | 日韩一区高清 | 美丽的姑娘在线观看免费 | 高清中文字幕 | 温柔少妇的高潮呻吟 | av在线网页 | av大帝| 午夜三级av| 激情婷婷六月天 | 浪漫樱花在线观看高清动漫 | 青青在线视频观看 | 91狠狠综合 | 欧美一区二区三区免费视频 | 日本美女毛茸茸 | 免费av在| 国产精品一区二三区 | av激情在线| 久久美女精品 | 超污巨黄的小短文 | 欧美激情3p | 久久久ww| 男女吻胸做爰摸下身 | 欧美日韩国产一区二区在线观看 | 怡红院国产 | 激情欧美一区二区三区精品 | 黄色精品在线 | 国产免费的av | 亚洲成人久久久 | 夜夜夜爽 | 日本一区二区在线免费 | 精品九九在线 | 日韩一区二区免费在线观看 | 日韩夜夜操| 五月天av影院 | 国产成人免费观看视频 | 亚洲快播 | 亚洲国产视频在线观看 | 伊人夜夜| 看91| 性猛交富婆╳xxx乱大交天津 | 欧美亚洲一区二区三区 | 精品国产一区二区三区性色 | 欧美激情精品久久久久久免费 | 亚洲欧洲一区二区三区 | 精品人妻一区二区三区日产乱码 | 麻豆一区二区在线 | 中文字幕亚洲欧美日韩在线不卡 | 天天操夜夜添 | 波多野结衣有码 | 成年人视频在线播放 | 天堂欧美城网站网址 | 国产aa大片 | 少妇欧美激情一区二区三区 |