bzoj2744[HEOI2012]朋友圈

題目鏈接:bzoj2744

題目大意:

兩個國家看成是AB兩國,現在是兩個國家的描述:

1.A國:每個人都有一個友善值,當兩個A國人的友善值a、b,如果a xor b mod 2=1,那么這兩個人都是朋友,否則不是;
2.B國:每個人都有一個友善值,當兩個B國人的友善值a、b,如果a xor b mod 2=0 或者 ? (a or b)化成二進制有奇數個1,那么兩個人是朋友,否則不是朋友;
3.A、B兩國之間的人也有可能是朋友,數據中將會給出A、B之間“朋友”的情況。
4.在AB兩國,朋友圈的定義:一個朋友圈集合S,滿足S∈A∪B,對于所有的i,j∈S,i和j是朋友

求出最大朋友圈的人數


題解:

匈牙利求二分圖的最大匹配

%%%[迷の想到tarjan的我ORZ...

這個題的意思是要我們求一個圖的最大團。嗯。一定有特殊性質才使這道題可做。

首先觀察A國人,a xor b mod 2=1,就是說當且僅當這兩人一奇一偶的時候才為朋友,就是說A國的相當于一個二分圖。而二分圖的最大團只有2。

然后看B國人,可以發現,奇數間是個完全圖,偶數間也是(在先不考慮第二個條件的情況下)。那么它的補圖就是個二分圖,考慮埋第二個條件也是。而在某圖是個二分圖的前提下,其最大獨立子集就等于它補圖的最大團。于是我們構圖的時候就直接構造它的補圖,其實就是把每對奇偶都連上..(額不要忘了去掉滿足第二個條件的)。然后跑匈牙利就好了。

所以做法就是,枚舉A國選多少人(0,1,2),哪些人。根據選出來的A國人選出能與所有被選到的A國人成為朋友的B國人,構圖(如上所述的那樣↑),上匈牙利。因為有最大獨立子集=總點數-最大匹配,算出來后加上A國的人數就好了。


..我覺得我的代碼還是算好懂的吧,用了時間戳。嗯。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define maxn 250
#define maxm 3100int A[maxn],B[maxm];
int len,lem,bf[maxm];
int ask[maxm],tim;//用時間戳
int ln[maxm],lm[maxm];
bool bk[maxm][maxm],bo[maxn][maxm];
//bk[i][j]存B國中i,j是否突破了奇偶限制而成為了朋友
int mymax(int x,int y){return (x>y)?x:y;}
bool ffind(int x)
{int i;for (i=1;i<=lem;i++)if (ask[i]!=tim && !bk[ln[x]][lm[i]])//如果成為了朋友 那么補圖中他們兩個是不能連邊的{ask[i]=tim;if (bf[i]==-1 || ffind(bf[i])){bf[i]=x;return true;}}return false;
}
bool count(int x)
{int ret=0;while (x){if (x&1) ret++;x>>=1;}return ret&1;
}
int main()
{//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);int n,m,r,i,j,k,x,y,ia,num,ans;scanf("%d%d%d",&n,&m,&r);for (i=1;i<=n;i++)scanf("%d",&A[i]);for (i=1;i<=m;i++)scanf("%d",&B[i]);memset(bo,false,sizeof(bo));memset(bk,false,sizeof(bk));for (i=1;i<=r;i++){scanf("%d%d",&x,&y);bo[x][y]=true;}for (i=1;i<m;i++)for (j=i+1;j<=m;j++)if ((B[i]+B[j])&1){if (count(B[i]|B[j])) bk[i][j]=bk[j][i]=true;}memset(ask,0,sizeof(ask));ans=tim=0;len=lem=num=0;for (i=1;i<=m;i++)if (B[i]&1) ln[++len]=i;else lm[++lem]=i;memset(bf,-1,sizeof(bf));for (i=1;i<=len;i++){tim++;if (ffind(i)) num++;}ans=mymax(ans,len+lem-num);for (i=1;i<=n;i++){len=lem=num=0;for (j=1;j<=m;j++)if (bo[i][j]){if (B[j]&1) ln[++len]=j;else lm[++lem]=j;}memset(bf,-1,sizeof(bf));for (j=1;j<=len;j++){tim++;if (ffind(j)) num++;}ans=mymax(ans,1+len+lem-num);}for (i=1;i<n;i++)for (j=i+1;j<=n;j++) if ((A[i]+A[j])&1){len=lem=num=0;for (k=1;k<=m;k++)if (bo[i][k] && bo[j][k]){if (B[k]&1) ln[++len]=k;else lm[++lem]=k;}memset(bf,-1,sizeof(bf));for (k=1;k<=len;k++){tim++;if (ffind(k)) num++;}ans=mymax(ans,2+len+lem-num);}printf("%d\n",ans);return 0;
}


轉載于:https://www.cnblogs.com/Euryale-Rose/p/6527806.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253368.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253368.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253368.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux之父為過去的言行道歉,宣布離開社區反思

9月17日&#xff0c;Linux 4.19-rc4發布&#xff0c;成為Linux 4.19最新的開發測試內核。這是現階段一個相當常規的內核更新&#xff0c;但令人震驚的是&#xff0c;Linux之父Linus Torvalds宣布將暫時離開內核維護社區&#xff0c;Greg Kroah-Hartman將接管接下來的Linux 4.19…

[BZOJ] 1620: [Usaco2008 Nov]Time Management 時間管理

1620: [Usaco2008 Nov]Time Management 時間管理 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 850 Solved: 539[Submit][Status][Discuss]Description Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs con…

面試-接口和純虛類的區別

相關資料&#xff1a;1.https://zhidao.baidu.com/question/91157279.html 純虛類:1.一個子類只能繼承一個抽象類&#xff08;虛類&#xff09;。2.一個抽象類可以有構造方法。 3.一個抽象類中的方法不一定是抽象方法&#xff0c;即其中的方法可以有實現&#xff08;有方法體&a…

TCP研究

tcp協議本身是可靠的,并不等于應用程序用tcp發送數據就一定是可靠的.不管是否阻塞,send發送的大小,并不代表對端recv到多少的數據 在阻塞模式下, send函數的過程是將應用程序請求發送的數據拷貝到發送緩存中發送并得到確認后再返回.但由于發送緩存的存在,表現為:如果發送緩存大…

DDR工作原理

DDR SDRAM全稱為Double Data Rate SDRAM&#xff0c;中文名為“雙倍數據流SDRAM”。DDR SDRAM在原有的SDRAM的基礎上改進而來。也正因為如此&#xff0c;DDR能夠憑借著轉產成本優勢來打敗昔日的對手RDRAM&#xff0c;成為當今的主流。本文只著重講講DDR的原理和DDR SDRAM相對于…

8.1 文件查找local;find使用

文件查找&#xff1a; 在文件系統上查找符合條件的文件。 文件查找&#xff1a;locate, find 非實時查找(數據庫查找)&#xff1a;locate實時查找&#xff1a;find locate 1 查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db2 依賴于事先構建的索引 索引的構建是在…

hdu 5273 Dylans loves sequence 逆序數 區間dp

點擊打開鏈接 題意&#xff1a;給n個數&#xff0c;q次詢問&#xff0c;&#xff08;L&#xff0c;R&#xff09;區間內的逆序數。 思路&#xff1a; 區間dp 代碼一&#xff1a; 1 #include <bits/stdc.h>2 using namespace std;3 typedef long long ll;4 const int maxn…

python第三天習題

# 1. 文件a.txt內容&#xff1a;每一行內容分別為商品名字&#xff0c;價錢&#xff0c;個數&#xff0c;求出本次購物花費的總錢數# apple 10 3# tesla 100000 1# mac 3000 2# lenovo 30000 3# chicken 10 3## 2. 修改文件內容&#xff0c;把文件中的alex都替換成SB# with ope…

智能故事機方案簡介

智能故事機&#xff0c;又叫WiFi故事機&#xff0c;AI故事機&#xff0c;通過WiFi聯網&#xff0c;用戶語音就可以跟它進行問答、點歌等互動&#xff1b;由于聯網所以可以播放云端海量的兒童音頻內容&#xff1b;手機端在微信公眾號或者專屬APP上操作&#xff0c;可以點播相應內…

使用setsockopt()接口,設置TCP的接收與發送超時,Invalid argument錯誤問題

使用TCP套接字時&#xff0c;當無網絡連接時&#xff0c;還會繼續send&#xff0c;繼續recv阻塞&#xff0c;知道TCP自己協議機制判斷斷開連接時才會停止發送和接收&#xff0c;時間需要幾分鐘之久。解決的辦法是&#xff0c;自己設置接收超時時間&#xff0c;當超時后重新發送…

關于SpringCloud、SpringBoot 希望這是說得最詳細的

幾年前&#xff0c;沒幾個jar沖突一下都不叫搭框架 —— java面試必修 什么是Spring Boot 用我的話來理解&#xff0c;Spring Boot就是整合了框架的框架&#xff0c;它讓一切依賴都變得有序簡單&#xff0c;你不用操心A.jar是什么版本&#xff0c;又依賴哪些版本的jar&#xff…

weui-switch開關控件,表單提交后如何取值

最近在學習weui這個框架&#xff0c;做了一些小的試驗&#xff0c;發現weui-switch控件直接提交不能獲取到表單信息&#xff0c;在segmentfault上發現也有人提了這個問題&#xff0c;有人說可以設置一個隱含標簽來捕獲開關的狀態&#xff0c;試了一下&#xff0c;確實可以&…

麥克風設計指導與選型參考

隨著語音識別技術的成熟&#xff0c;智能音箱類產品的火爆&#xff0c;越來越多的產品可以升級為語音交互產品&#xff1b; 下面簡單介紹下此類產品的語音前端--麥克風陣列設計相關注意事項&#xff1a; 線性四麥陣列構型&#xff1a;如上圖所示&#xff0c;麥克風直線等距擺…

[BZOJ1419] Red is good(期望DP)

傳送門 逆推 只不過順序還是順著的&#xff0c;思想是逆著的 f[i][j]表示還剩下i張紅牌&#xff0c;j張黑牌的期望值 那么邊界是 f[i][0]i&#xff0c;因為只剩i張紅牌 f[0][j]0&#xff0c;只剩黑牌&#xff0c;顯然直接停止最優 f[i][j] max(0,i/(ij)*f[i-1][j]j/(ij)*f[i][…

Linux下高性能網絡編程中的幾個TCP/IP選項_SO_REUSEADDR、SO_RECVBUF、SO_SNDBUF、SO_KEEPALIVE、SO_LINGER、TCP_CORK、TCP_NODE

最近在新的平臺上測試程序&#xff0c;以前一些沒有注意到的問題都成為了性能瓶頸&#xff0c;通過設置一些TCP/IP選項能夠解決一部分問題&#xff0c;當然根本的解決方法是重構代碼&#xff0c;重新設計服務器框架。先列出幾個TCP/IP選項&#xff1a; 選項 man 7 socket: SO_R…

云計算在未來一定是不可或缺的

2019獨角獸企業重金招聘Python工程師標準>>> 在2018京東云合作伙伴大會上&#xff0c;京東云總裁申元慶表示&#xff0c;技術發展的大趨勢是“分久必合&#xff0c;合久必分”循環往復的波動&#xff0c;近十年來云計算的發展將算力、存儲、帶寬全部集中在中央部分&…

智能音箱 之 音頻通路質量--測試與參數

一、概述 當將語音識別算法接入到設備時&#xff0c;務必要保證設備的音頻通路具有足夠的質量。因此對設備進行音頻測試&#xff0c;以評估能夠影響語音識別性能的音頻前端的音頻參數。如下要點對語音識別至關重要&#xff1a; 自然聲音合適的增益良好的信噪比一致的響應&…

關于Linux路由表的route命令

轉自&#xff1a;http://www.cnblogs.com/gunl/archive/2010/09/14/1826234.html 查看 Linux 內核路由表 使用下面的 route 命令可以查看 Linux 內核路由表。 # route Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * …

Python學習 - 常用模塊(二)

目錄 一. 常用模塊 - hashlib 二. 常用模塊 - hmac 三. 常用模塊 - logging 四. 常用模塊 - re 五. 常用模塊 - requests 六. 常用模塊 - paramiko 一. 常用模塊 - hashlib hash: 一種算法, 3.x里代替了md5模塊和sha模塊, 主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 …

select函數分析

Select在Socket編程中還是比較重要的&#xff0c;可是對于初學Socket的人來說都不太愛用Select寫程序&#xff0c;他們只是習慣寫諸如connect、accept、recv或recvfrom這樣的阻塞程序&#xff08;所謂阻塞方式block&#xff0c;顧名思義&#xff0c;就是進程或是線程執行到這些…