HDU 2819 最大匹配

2022-03-21 02:12:56 字數 746 閱讀 6964

這個題就是給你乙個只含有0和1的矩陣, 問你能否通過行列交換使得對角線上的元素全為1, 首先需要注意的是我們僅通過行交換或者列交換就可以使得矩陣滿足條件, 然後我們將行和列看成點, 矩陣中1的元素看成邊, 建立乙個有向圖, 求出行列的最大匹配數,即可。。**如下:

#include using

namespace

std;

intn;

int mat[105][105

];int p[105]; //

第i列匹配的行

int vis[105

];bool dfs(int

u) }

return

false;}

int a[1000], b[1000

];int

cnt;

intmain()

memset(p, -1, sizeof

(p));

int pipei = 0

;

for(int i=1; i<=n; i++)

if(pipei !=n)

cnt = 0

;

for(int i=1; i<=n; i++) //

尋找 }

printf(

"%d\n

", cnt);

for(int i=0; i)

}return0;

}

HDU 2819 行列匹配 輸出解

題意 給你乙個矩陣,每個格仔是0或者1,每次操作可以任意交換兩行或者兩列,問是否可以使得主對角線的所有點都為1,如果沒有,則輸出 1,否則輸出交換操作。分析 行列匹配 暴力找解,只移動行或者列就行。include include include using namespace std const i...

hdu 2819 求最小頂點覆蓋數

和其他最小頂點覆蓋數題沒啥區別 唯一區別是求完之後要交換一下列或者行 將你求得的匹配行或者列交換一下再輸出就好 includeusing namespace std define max path 1000 define me a memset a,1,sizeof a int top,head m...

hdu2819 Swap 最大匹配數

題意 給定乙個n n的矩陣,格仔數字0或者1,通過交換兩行或兩列使對角線都是1。若不能,輸出 1 若可以,輸出交換次數,並且輸出交換的行或者列。如果某行或者某列全是0。那怎麼換都沒辦法的。否則,一定能換出來。這個動動腦子想一下可以明白的。其次要明確 只交換行或者只交換列都是可以換出來的。這個動動腦子...