uoj308 UNR 2 UOJ拯救計畫

2022-03-26 00:30:17 字數 1547 閱讀 4885

傳送門:

【題解】

考慮列舉用了$i$所學校,那麼貢獻為$ * cnt * i!$

意思是從$k$所選$i$所出來染色,$cnt$為固定顏色順序的染色方案,$i!$為可以交換學校位置。

考慮當$i \geq 3$的時候,貢獻含有模數因子6,所以模6為0,相當於沒有貢獻。

當$i = 1$,顯然只有$m = 0$有貢獻。

對於$m = 0$我們特判,答案顯然是$k^n$。

剩下$i = 2$的情況,也就是我們要判斷答案是不是乙個二分圖,如果不是二分圖,顯然答案為0。

考慮令$cnt' = cnt * i!$,那麼二分圖的乙個連通塊只要確定了1個點顏色,剩下確定下來了,所以$cnt' = 2^p$,其中$p$為連通塊個數。

那麼貢獻為$2^ * k * (k-1)$,直接算就好了。

複雜度$o(t(n + m))$

# include # include 

# include

# include

//# include

using

namespace

std;

typedef

long

long

ll;typedef

long

double

ld;typedef unsigned

long

long

ull;

const

int n = 1e5 + 10, m = 4e5 + 10

;const

int mod = 6

;inline

intgetint()

int n, m, k, head[n], nxt[m], to[m], tot = 0

;inline

void add(int u, int

v) inline

void adde(int u, int

v) inline

int pwr(int a, int

b)

return

ret;

}bool ok; int

c[n];

inline

void color(int

x)

continue

; }

c[to[i]] = -c[x];

color(to[i]);

}}inline

void

sol()

if(m == 0

)

//bitgraph

int ans = 1

; ok = 1

;

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

if(!c[i])

}printf(

"%d\n

", k * (k-1) / 2 * ans %mod);

}int

main()

view code

UOJ 308 UNR 2 UOJ拯救計畫

uoj 如果模數很奇怪,我們可以插值一下,設 f i 表示用了 i 種顏色的方案數。然而模 6 這個東西很有意思,6 2 3 所以我們只需要考慮其模 2 和模 3 的結果了。而最終答案的貢獻是 sum k a i f i 當 i ge 3 的時候 6 a k i 所以我們只需要知道 f 0 f 1 ...

Uoj308 UNR 2 UOJ拯救計畫

分析 比較難分析的一道題,先把式子寫出來,ans c k,i f i f i 是選i個顏色的方案數.這個模數有點奇怪,比較小而且是合數,說不定就會有某種規律,如果i 3,可以發現c k,i 一定是被6整除的,那麼我們只需要考慮i 2和i 1的情況,i 1的情況比較好處理,這種情況下,m只有等於0,答...

A UNR 2 UOJ拯救計畫

題解 感覺多了解一些npc問題是很有用的。就不會像我一樣完全不考慮模數的性質 前面60分大概是送分 後面主要考慮一下 6帶來的影響 平常都是那麼大的模數,突然這麼小?考慮正好使用k種顏色的方案數 f k a n,k 而a n,k n n k 顯然可以發現,當k 3的時候 這個數一定是6的倍數啊 這樣...