貪心 傳遞閉包 CF500B

2021-08-21 12:07:33 字數 857 閱讀 9961

題目大意:給定乙個n 的排列p 以及乙個01 矩陣a,若ai;j = 1 則你可以交換任

意次pi; pj,求經過交換後能得到的字典序最小的排列

solution:

從第一位開始貪心選能換到的最小的數

利用傳遞閉包求出每個位置上的數能換到哪些位置

o(n3)

這裡說到了傳遞閉包

這裡有乙個部落格寫的很詳細

具體來說就是乙個鄰接矩陣,用floyd可以求出每個點間接聯通情況

像這樣

void floyd()

}

emm就這了

1a

#include

#include

#include

#include

#include

#define maxn 305

using

namespace

std;

int n,a[maxn],b[maxn][maxn];

char s[maxn];

inline

int rd()

while(c<='9' && c>='0') x=x*10+c-'0',c=getchar();

return x*f;

}void floyd()

}int main()

floyd();

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

swap(a[i],a[tar]);

} for(int i=1;i<=n;i++) printf("%d ",a[i]);

return

0;}

flord 傳遞閉包

傳遞指對於乙個節點i,如果j能到i,i能到k,那麼j就能到k。傳遞閉包,就是把圖中所有滿足這樣傳遞性的節點都弄出來,計算完成後,我們也就知道任意兩個節點之間是否相連。break 指跳出一層迴圈 continue 結束本次迴圈,跳過本次判斷語句 每只奶牛的技能獨一無二,如果給奶牛們排序的話,能確定自己...

floyd傳遞閉包

傳遞閉包 我第一反應是凸包emmm 就是把具有傳遞性的關係傳遞開。一般我們用一鄰接矩陣儲存。比如許多的並查集解決的問題,如果需要細緻 效率o n 可以用傳遞閉包去做。看一道題吧,poj1094,不等式的傳遞性。這道題在處理方面,d i,j 為1時表示i1 矛盾與不確定,優先矛盾。2 若加入了幾個,發...

閉包傳遞(floyed)

題目大意 n代表母牛的個數,m代表給定的資訊的組數。每一組數包括a,b.代表b崇拜a 突然發現可以用tarjan演算法做 然後問你最終有多少母牛的地位是確定的。include include include include include include include include includ...