日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Atcoder ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Atcoder ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Atcoder ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer

題目描述

簡要題意:給定一個有標號的無向圖,你可以給每條邊染上KKK種顏色之一,求本質不同的圖的染色方案(兩個圖本質不同定義為不能通過若干次環的旋轉使這兩個圖每條邊的染色相同)。

Solution

分類討論:
倘若是一條單邊(不包含在任何環中),則它的顏色任意,方案數為KKK

倘若是一個單環(不與其他環的邊相交),則環上的顏色要旋轉后本質不同,經典的BurnsideBurnsideBurnside問題,設環長為cntcntcnt,則方案數為∑i=0sz?1kgcd(i,sz)\sum_{i=0}^{sz-1} k^{gcd(i,sz)}i=0sz?1?kgcd(i,sz)

倘若是兩個或以上的環嵌套,可以發現環上的顏色都是可以互換的,兩個嵌套環不同,當且僅當某種顏色的個數不同,因此方案數就是一個插板法,設嵌套環有szszsz條邊,則方案數為C(sz+K?1,K?1)C(sz+K-1,K-1)C(sz+K?1,K?1)

#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <cctype> #include <string> #include <cstring> #include <ctime> #include <cassert> #include <string.h> //#include <unordered_set> //#include <unordered_map> //#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B) #define PB(A) push_back(A) #define SIZE(A) ((int)A.size()) #define LEN(A) ((int)A.length()) #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define fi first #define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; } template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll; typedef unsigned long long ull; typedef long double lod; typedef pair<int,int> PR; typedef vector<int> VI;const lod eps=1e-11; const lod pi=acos(-1); const int oo=1<<30; const ll loo=1ll<<62; const int mods=1e9+7; const int MAXN=600005; const int INF=0x3f3f3f3f;//1061109567 /*--------------------------------------------------------------------*/ inline int read() {int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f; } vector<int> e[MAXN],V[MAXN]; int fac[MAXN],inv[MAXN],dfn[MAXN],low[MAXN],stk[MAXN],flag[MAXN],top=0,num=0,DFN=0,n,m,k; inline int quick_pow(int x,int y) {int ret=1;for (;y;y>>=1){if (y&1) ret=1ll*ret*x%mods;x=1ll*x*x%mods;}return ret; } inline void Init(int n) {fac[0]=1; for (int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mods;inv[n]=quick_pow(fac[n],mods-2);for (int i=n-1;i>=0;i--) inv[i]=1ll*inv[i+1]*(i+1)%mods; } inline int upd(int x,int y) { return x+y>=mods?x+y-mods:x+y; } inline int gcd(int x,int y) { return y==0?x:gcd(y,x%y); } inline int C(int x,int y) { return 1ll*fac[x]*inv[y]%mods*inv[x-y]%mods; } inline int Burnside(int n) { int ans=0; for (int i=0;i<n;i++) ans=upd(ans,quick_pow(k,gcd(i,n))%mods); return 1ll*ans*quick_pow(n,mods-2)%mods; } inline void tarjan(int x,int father) {dfn[x]=low[x]=++DFN;stk[++top]=x;for (auto v:e[x]){if (v==father) continue;if (!dfn[v]){tarjan(v,x);upmin(low[x],low[v]);if (low[v]>=dfn[x]){int y;V[++num].PB(x);while (y=stk[top--]){V[num].PB(y);if (y==v) break;}}}else upmin(low[x],dfn[v]);} } int main() {n=read(),m=read(),k=read();Init(m+k);for (int i=1;i<=m;i++){int u=read(),v=read();e[u].PB(v),e[v].PB(u);}for (int i=1;i<=n;i++) if (!dfn[i]) tarjan(i,0);int ans=1;for (int i=1;i<=num;i++){if (V[i].size()==2) ans=1ll*ans*k%mods;else{int cnt=0;for (int i=1;i<=n;i++) flag[i]=0;for (auto x:V[i]) flag[x]=1;for (auto x:V[i])for (auto v:e[x]) if (flag[v]) cnt++;cnt>>=1;if (cnt==V[i].size()) ans=1ll*ans*Burnside(cnt)%mods;else ans=1ll*ans*C(cnt+k-1,k-1)%mods; // cout<<V[i].size()<<" "<<cnt<<" "<<ans<<endl;}}printf("%d\n",ans);return 0; }

總結

以上是生活随笔為你收集整理的Atcoder ARC062F - AtCoDeerくんとグラフ色塗り / Painting Graphs with AtCoDeer的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91嫩草欧美久久久九九九 | 成人欧美一区二区三区黑人孕妇 | 久久久老司机 | 美女久久久久久久久 | 国产夫妻性生活视频 | 亚洲第一av在线 | 女人脱裤子让男人捅 | 久久黄色影院 | 午夜影院免费 | 黑人黄色大片 | bangbros性欧美18 | 日韩天堂一区 | 久热超碰 | 精品人妻一区二区三 | 久久无码性爱视频 | www.97av| 国产99免费 | 亚洲av午夜精品一区二区三区 | 日xxxx| 亚洲 欧美 日韩 国产综合 在线 | 久久午夜夜伦鲁鲁片 | 国产一级黄色大片 | www.日日夜夜 | 国产精品videossex久久发布 | 日韩性爰视频 | 自拍偷拍导航 | 日本不卡视频一区 | 中文无码一区二区三区在线观看 | 中文在线字幕免费观看 | 欧日韩不卡视频 | 日韩无码电影 | 青青草成人在线 | 久久久久久欧美精品se一二三四 | 亚洲视频999| 亚洲成年人网站在线观看 | 久久婷色 | 三级a级片 | 久久久免费观看 | 精品福利在线视频 | 国产特级黄色片 | 西西毛片| 九色91丨porny丨丝袜 | 久久精品一二区 | 日韩精品一区二区三区 | 亚洲熟妇无码久久精品 | 2019自拍偷拍 | 欧美看片 | 啊av在线 | 国产乱淫视频 | 精品国产色 | 99久久人妻无码中文字幕系列 | 91香焦视频 | 亚洲视频免费在线播放 | 亚洲人视频 | 天天干天天干天天干天天 | 国产综合一区二区 | 在线观看网站 | 国产在线观看网站 | 青娱乐久久 | 夜夜撸影院 | 日日舔夜夜摸 | 2021av视频 | 国产日韩欧美综合 | 日韩亚洲一区二区三区 | 人人艹人人爽 | 婷婷成人综合 | 欧美又大又硬又粗bbbbb | 免费在线观看av的网站 | 久久av无码精品人妻系列试探 | 免费av大全 | 黄色片网站视频 | 亚洲欧美视频在线播放 | 伊人久久中文 | 国产无遮挡aaa片爽爽 | 美女自拍视频 | 亚洲精品国产精品乱码不99热 | 超碰人人人人人 | 欧美成人猛片aaaaaaa | 三级av免费 | 亚洲国产精品久久人人爱 | 日本一道在线 | 免费萌白酱国产一区二区三区 | www,xxx日本 | 久久精品人妻一区二区 | 91午夜视频在线观看 | 亚洲 欧美 激情 小说 另类 | 在线尤物 | 精品午夜一区二区三区在线观看 | 神马久久久久久久久 | 日韩精品人妻中文字幕有码 | 天天干天天色天天 | 毛片直接看 | av大片网站 | 成人国产欧美 | av制服丝袜 | 美女又爽又黄免费 | 欧美激情18| 亚洲爱爱视频 | 伦一理一级一a一片 |