HDU2819 Swap 匈牙利演算法 行列匹配

2021-10-09 12:54:19 字數 1131 閱讀 1414

題目鏈結

sample output

1r 1 2

-1給定乙個僅含有0與1的n階方陣,詢問是否可以通過行列變換將其對角線上的所有元素變為1,若能則輸出變換方法。

行列進行匹配,若結果小於n則說明現存元素無法使得對角線全為1,否則作行列變換。需要清楚的是,僅通過行或列變換即可以滿足題目要求。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e5+5;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int minn=

0xc0c0c0c0

;bool ch[maxn]

;int t,n,m,p,k,ans,cnt,ed[maxn]

,maze[

105]

[105];

struct node

a[maxn]

;bool find

(int x)}}

return false;

}int

main()

}for

(int i=

1;i<=n;i++

)//二分匹配

if(ans!=n)

printf

("-1\n");

//無法滿足條件

else

//記錄列並交換對應行}}

}printf

("%d\n"

,cnt)

;for

(int i=

1;i<=cnt;i++

)printf

("c %d %d\n"

,a[i]

.c1,a[i]

.c2);}

}return0;

}

HDU 2819 Swap(二分匹配)

題意 交換任意兩行或兩列,使主對角線全為1。分析 1 主對角線都為1,可知最終,第一行與第一列匹配,第二行與第二列匹配,2 根據初始給定的矩陣,若aij 1,則說明第i行與第j列匹配,據此求最大匹配數cnt,若cnt n,才可通過交換使主對角線都為1。3 交換時,可只交換行或只交換列。如 只交換列,...

hdu2819 Swap 最大匹配數

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

HDU 1151 二分匹配 匈牙利演算法

二分匹配 匈牙利演算法 根據 dag圖的最小路徑覆蓋數 節點數 n 最大匹配數 m 先用匈牙利演算法求出最大匹配數,再用它減去節點數就可以了 include includeusing namespace std const int n 125 int map n n vis1 n vis2 n fl...