題目鏈結
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...