程式設計開發求朋友圈最大數目(最大團)

2022-09-23 20:27:17 字數 2280 閱讀 2470

在很久很久以前,曾經有兩個國家和睦相處,無憂無慮的生活著。一年一度的評比大會開始了,作為和平的兩國,乙個朋友圈數量最多的永遠都是最值得他人的尊敬,所以現在就是需要你求朋友圈的最大數目。

兩個國家看成是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之間「朋友」的情況。

在ab兩國,朋友圈的定義:乙個朋友圈集合s,滿足

s∈a∪ b ,對於所有的i,j∈ s ,i 和 j 是朋友

由於落後的古代,沒有電腦這個也就成了每年最大的難題,而你能幫他們求出最大朋 友圈的人數嗎?

input

第一行t<=6,表示輸入資料總數。

接下來t個資料:

第一行輸入三個整數a,b,m,表示a國人數、b國人數、ab兩國之間是朋友的對數;第二行a個數ai,表示a國第i個人的友善值;第三行b個數bi,表示b國第j個人的友善值;

第4——3+m行,每行兩個整數(i,j),表示第i個a國人和第j個b國人是朋友。

output

輸出t行,每行,輸出乙個整數,表示最大朋友圈的數目。

sample input

2 4 7

1 22 6 5 4

1 11 2

1 32 1

2 22 3

2 4sample output

【樣例說明】

最大朋友圈包含a國第1、2人和b國第1、2、3人。

hint

【資料範圍】

兩類資料

第一類:|a|<=200 |b| <= 200

第二類:|a| <= 10 |b| <= 3000

當時做的時候,一看要求就是要求乙個最大團,一般的圖求最大團是指數級的肯定不可能 ,那麼最大團可以接受的演算法就是二分圖的最大團了,nm的。

考慮二分圖的最大團的條件,即兩個集合,每個集合的元素之間互相兩兩有邊,然後兩個集合互相有邊,跑最大團但是把這兩個集合當成a和b來做的話顯然不太合適,因為首先就沒有滿足a集合或者b集合兩兩有邊的條件。

但是這道題的建邊方式不一般,肯定有什麼門道。

觀察發現a中元素的朋友的條件是友善值一奇一偶,靈光一現a最多兩個人,那我們就列舉哪兩個人,然後把他們相交的部分在b集合裡面選出來然後搞乙個最大團,但是這個最大團的複雜度嚴格來說和直接求是一致的,那還是要往二分圖上想 。

考慮b裡面是朋友的方式 ,然後想到只要都是奇數,或者都是偶數,互相之間肯定是有邊的,那麼就完全轉化成二分圖的模型了,用補圖的最大點獨立集就好。

最好不要每次memset,搞乙個時間戳什麼的比較好。

注意這道題的輸入裡面有重邊,所以判斷每次b裡面選了幾個的時候需要略略注意一下。

#include

#include

#include

#include

#include

#define n 3010

using namespace std;

struct edgeed[n * n];

vector va[n];

int a, b, m, idc=0, cc=0, tot=0, timex=0;

int head[n], mrk2[n], mrk1[n];

int a[n], b[n], lnk[n], flag[n];

void adde(int u, int v)

int find(int u)}}

return 0;

}bool check(int i, int j)

if(cnt & 1) return 1;

else return 0;

}void build()

int work()

return tot - ans;

}int main()

build();

int ans = 0;

timex++;//是否可選

for(int i=1; i<=b; i++) mrk2[i] = timex;

tot = b;

ans = max(ans, work());//不選a

for(int i=1; i<=1; i++){//選乙個a

tot = 0, timex++;

for(int j=0; j

LeetCode 求朋友圈的個數

題目描述 給定乙個二維的0 1矩陣,如果第 i,j 位置是1,則表示第i個人和第j個人是朋友.已知朋友關係是可以 傳遞的,即如果a是b的朋友,b是c的朋友,那麼a和c也是朋友,換言之這三個人處於同乙個朋友圈之內.求 一共有多少個朋友圈.示例 input 1,1,0 1,1,0 0,0,1 outpu...

朋友圈分析1

conding utf 8 from wxpy import from pyecharts import pie,bar 1 建立機械人 bot bot cache path true 2 查詢朋友 friends bot.friends search 1 3 朋友總數 total len frie...

社交名片 朋友圈

序 不管你是否承認 現在朋友圈已經間接代表你的一些個人形象 為什麼要維護朋友圈 很多人會說 朋友圈是我自己的 我想發什麼就發什麼 或者乾脆就不發朋友圈 聽起來很有道理 其實不然 朋友圈這三個字的含義就是 圍繞你聚集起的乙個朋友圈子 少則幾百人 多則幾千人 所以這並不是你乙個人的私人領地 有時候你發一...