小凸和小方是好朋友,小方給了小凸乙個 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 個...