洛谷P4251 SCOI2015 小凸玩矩陣題解

2021-09-11 07:18:34 字數 697 閱讀 9364

小凸和小方是好朋友,小方給了小凸乙個 n × m (n \leq m)(n≤m) 的矩陣 a,並且要求小凸從矩陣中選出 n 個數,其中任意兩個數都不能在同一行或者同一列。現在小凸想知道,選出的 n 個數中第 k 大的數的最小值是多少。

#include#include#include#include#include#include#define maxn 510

using namespace std;

struct ytsq[100010];

int b[maxn][maxn];

int lk[maxn];

int a[maxn][maxn];

bool vis[maxn];

int n,m,num,k,tot;

bool find(int x)

}return 0;

}bool check(int x)

if (ans>=n-k) return 1; else return 0;

}bool cmp(yts x,yts y)

int main()

sort(q+1,q+tot+1,cmp);

int l=1,r=tot,ans=0;

while (l<=r)

printf("%d\n",q[ans].w);

return 0;

}

洛谷 4251 SCOI2015 小凸玩矩陣

題解 二分答案 二分圖匹配。先二分最小值min,然後掃一遍這個矩陣,把滿足a i j min的i,j連邊,之後跑二分圖匹配,如果最大匹配數大於等於n k 1,當前的min即是合法的。題目中要求選出的數不能在同一行或者同一列,而這種行與列連邊跑二分圖的做法就保證了一行與一列對應,最多只能選一次。題目中...

洛谷P2507 SCOI2008 配對

走這裡思路源於題解第一篇 首先考慮此題若沒有不允許兩個相同的數配對這一條件,則好辦很多,直接分別排序後一一配對即可。然後考慮有這一條件的情況 注意到有 ai 不相同,bi 也各不相同的條件,即如果當前匹配的兩個數是相同的,那麼調整其中乙個數為其相鄰的兩個數,就一定不會失配。因此我們先對兩個數列排一遍...

洛谷 P4159 SCOI2009 迷路

如果邊權為 1 11,則是簡單的矩陣快速冪加速dp遞推方程,又因為邊權並不大,所以考慮拆點,新圖中邊權均為 1 11,將每個點暴力拆成相連的 9 99 個點,對於原先某條邊 u,v,w u,v,w u,v,w 可以轉化為 u uu 拆成的點中第 w ww 個連向 v vv 拆成的點中第 1 11 個...