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],f[2]\)的值。
\(f[0]\)的值?當然是\(0\)啊。
\(f[1]\)的話,如果每個連通塊都沒有邊的話就有方案數\(1\),否則\(0\)。
\(f[2]\)的話,二分圖染色,如果可以分成二分圖,答案就是\(2\)的連通塊個數次方
實際上因為只要\(m\neq 0\),答案模\(2\)一定等於\(0\),所以只需要考慮\(3\)的情況。
#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
#define max 100100
inline int read()
int n,m,k;
int fpow(int a,int b)return s;}
vectore[max];int col[max];bool fl;
void dfs(int u,int c)
col[u]=c;
for(int v:e[u])dfs(v,c^1);
}int main()
for(int i=1;i<=m;++i)
for(int i=1;i<=n;++i)col[i]=-1;
fl=true;int cnt=0;
for(int i=1;i<=n;++i)if(col[i]==-1)dfs(i,0),++cnt;
if(!fl)puts("0");
else printf("%d\n",k%6*(k-1)%6*fpow(2,cnt)%6*2%6);
for(int i=1;i<=n;++i)e[i].clear();
} return 0;
}
uoj308 UNR 2 UOJ拯救計畫
傳送門 題解 考慮列舉用了 i 所學校,那麼貢獻為 cnt i 意思是從 k 所選 i 所出來染色,cnt 為固定顏色順序的染色方案,i 為可以交換學校位置。考慮當 i geq 3 的時候,貢獻含有模數因子6,所以模6為0,相當於沒有貢獻。當 i 1 顯然只有 m 0 有貢獻。對於 m 0 我們特判...
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的倍數啊 這樣...