傳送門:
【題解】
考慮列舉用了$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 # includeview code# 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()
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的倍數啊 這樣...