jzoj5354
題目大意
給出n nn(
n≤
1000
)(n\le 1000)
(n≤100
0)個三維座標xi,
yi,z
ix_i,y_i,z_i
xi,yi
,zi
,求任意排列下的最長上公升子串行和最小鏈覆蓋
前一問顯然用o(n
2)
o(n^2)
o(n2
)dp暴力求,你想用o(n
logn
)o(nlogn)
o(nlog
n)也是可以的
對於後一問,乍一看可以用
最小鏈覆蓋等於最長反鏈於是信誓旦旦的打了個最長不上公升子串行,結果沒過樣例,才發現反鏈不是我想象中的那種東西。。。
然後考慮拆點,每有點x
−>
yx->y
x−>
y就連線a
xa_x
ax和b
yb_y
by,跑匈牙利演算法,最小鏈覆蓋就等於n
nn減去匹配數。
原因是每有乙個匹配就相當於把兩個原圖上的點連了起來,沒有連的時候每個點都是一條鏈,連一次就可以少去一條鏈,二分圖匹配保證了每個點的初度和入度都小於2,所以一定是鏈。
其實也可以寫最大流跑的,具體搜尋:有向圖的最小鏈覆蓋
#include
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
const
int inf=
1e9+7;
using
namespace std;
const
int n=
1e3;
struct nodea[n+10]
;struct edgee[n*n]
;int n,m,f[n+10]
,ans1,ans2,tot,last[n+10]
,g[n*2+
10];bool vis[n*2+
10];void
add(
int x,
int y)
; last[x]
=tot;
}bool
cmp(node a,node b)
bool
cmp2
(node a,node b)
bool
dfs(
int x)
}return0;
}int
solve
(int n)
return n-ret;
}int
main()
sort
(a+1
,a+n+
1,cmp);fo
(i,1
,n)}
ans1=
max(ans1,f[i]);
} ans2=
solve
(n);
printf
("%d\n%d\n"
,ans1,ans2)
;return0;
}
20201017B組T3 計數題
jzoj 5352 題目大意 乙個有n nn個點的完全圖,每條邊的邊權是ai aj a i oplus a j ai aj 求最小生成樹的邊權和方案數 tj考慮按照最高位的 0 1 0 10 1 分成兩堆,容易得出兩堆點之間有且僅有一條邊相連 最優情況下 於是用trie求出這條邊的最小邊權和方案數,...
NOIPTG A組總結 T2題解
這是個慘烈的日子,讓我貼一貼成績。嗯。這就tm很尷尬了。話說我二十分還能拿個rank4。醉了 t1 world tour cf666b 667d 題意 給你一些單向邊,讓你求出四個點,使得經過這四個點的路徑盡可能的長 兩點之間走最短路徑,四個點不能重複,但是經過路徑可以 直接暴力spfa求出最遠的兩...
2019 05 25 模擬 A 組 T2 數格仔
暴搜搜出前面幾個的答案 然後列舉每一項的係數再列舉乙個常數項推出規律 規律 fn fn 1 5 f n 2 fn 3 fn 4 f n f 5 times f f f fn fn 1 5 fn 2 fn 3 fn 4 然後將搜尋出來的前四項帶入 矩陣乘法優化 include include incl...