現在告訴你選手數量和一些選手之間的友好度,該如何分隊(每組至少1人),才能讓兩隊的和諧度達到最大。請你來幫助組委會完成這個任務。
第一行為兩個正整數n,分別選手的數目以及友好度大於0的選手對數,選手編號為1n。,選手編號為1n。接下來是乙個n*n的矩陣,矩陣的第i行第j列表示選手i和選手j的友好度c,當i==j時c=0,注意,矩陣一定是斜對稱的。
乙個整數,表示最大和諧度,某些情況下可能為0。 2<=n<=1000 首先這道題是一道需要二分猜答案的二分圖練習題。需要求的是最大和諧度,也就是最小友好度,那麼就用鄰接矩陣存每一段友好度(也就是每一條邊的權值),dfs的時候將大於猜的那個答案的值的邊跳過,小於這個值的邊染色為1和2,判斷小於這個答案的所有邊是否能構成二分圖。然後因為這個圖不一定連通所以當vis等於0的時候就需要dfs一次。定義乙個l和r,把l賦初值為0,r賦初值為midx,當mid滿足條件時就往右邊猜,往右邊猜就要把l更新成mid+1,否則就往左邊猜,把r更新成mid-1,最後當l=r的時候while迴圈退出輸出ans,程式結束。
注意事項:
1.g[s][q]>=mid和s==q的時候都需要跳過,只有到遇到vis的值為1且兩個端點顏色相等的時候就return false,或者它的子圖不連通的時候return false。
2.每一次check(mid)之前要把color陣列和vis陣列清零避免爆了(。)
3.猜答案的時候跳l和r要+1和-1
#include#include#include#include#define maxn 1005
using namespace std;
int n,midx,midn,ans;
bool flag;
int g[maxn][maxn],color[maxn];
bool vis[maxn];
void init() }}
bool dfs(int s,int c,int mid)
else if(dfs(q,3-c,mid)==false)return false;
} return true;
}void tomid()
} midn=0;
}bool check(int mid)
int main()
else r=mid-1;
} printf("%d\n",ans);
return 0;
}
(p 1 和 ( p 1)的區別
內容會持續更新,有錯誤的地方歡迎指正,謝謝 例1 下面程式的輸出結果是 include void main int p 3 p n cout 0 0 p 0 1 p 2 解析 p是乙個指標,乙個指向長度為3的陣列的指標。直接在p上偏移就是行,在 p上偏移就是列。比如 p 1 等價於p 1 0 等於4...
編譯原理P1
1.高階語言 過程式語言 fortran pascal c 函式式語言 lisp 邏輯式語言 prolog 物件式語言 c 2.低階語言 面向機器的語言 組合語言 機器語言 翻譯 是指在計算機中放置乙個能由計算機直接執行的翻譯程式,它以某一種程式語言 源語言 所編寫的程式 源程式 作為翻譯或加工的物...
Flask WTF 入門使用P1
flask wtf為您的flask應用程式整合了wtforms,具體例子如下 from flask wtf import flaskform from wtforms import stringfield from wtforms.validators import datarequired cla...