<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      P6846 [CEOI 2019] Amusement Park 題解

      P6846 [CEOI 2019] Amusement Park 題解


      知識點

      狀壓計數 DP,DAG 計數,容斥,FWT。

      分析

      首先,如果我們可以花 \(c\) 把原圖轉成一張 DAG,那么就會有另一種 \(m-c\) 的方案。所以答案就變成了 \(\frac{m}{2}\) 倍的無向圖定向 DAG 計數。現在考慮 DAG 計數:設 \(f_{S}\) 表示導出子圖為 \(S\) 時,DAG 的數量。

      有一個最基本的思路,要把 \(S\) 分成兩部分,代表的意義是:在確定為 DAG 的第一部分中加入第二部分,生成一個新的 DAG 的方案。發現為了形成 DAG,我們第二部分必須為一個獨立集 \(T\),即其中沒有可以通過邊相連的節點

      我們可以通過 \(O(n2^n)\) 的復雜度預處理出每個集合是否為獨立集,記為 \(p_{S}\)(這里定義如果 \(S\) 是獨立集,則 \(p_S = 1\))。

      那么現在有轉移式:(注意 \(T\subset S\) 表示 \(T\)\(S\) 的真子集)

      \[f_S = \sum_{T \subseteq S,T \neq \varnothing} f_{S\setminus T} [p_{T}] \\ \]

      但是這是一個會重復計數的轉移式,所以我們對其進行容斥,現在推導其容斥系數:

      \(g_T\) 表示限定了導出子圖點集 \(S\) 下,選出的第二部分恰好為 \(T\) 時的方案數,那么實際上有:

      \[f_S = \sum_{T \subseteq S,T \neq \varnothing} g_{S} \\ g_T = \sum_{T\subseteq V\subseteq S} (-1)^{|V| - |T|} f_{S\setminus V} [p_{V}] \\ \]

      所以我們代入:

      \[\begin{aligned} f_S &= \sum_{T\subseteq S,T \neq \varnothing} \sum_{T\subseteq V\subseteq S} (-1)^{|V| - |T|} f_{S\setminus V} [p_{V}] \\ f_S &= \sum_{V\subseteq S,V \neq \varnothing} (-1)^{|V|} f_{S\setminus V} [p_{V}] \sum_{T\subseteq V,T \neq \varnothing} (-1)^{|T|} \\ \end{aligned} \]

      眾所周知,有二項式定理:(\(|U| = n > 0\)

      \[\begin{aligned} & \because (1 - 1)^{n} = \sum_{i=0}^{n} {n\choose i} (-1)^i \Leftrightarrow \sum_{S\subseteq U}(-1)^{|S|} \\ & \therefore \sum_{S\subseteq U}(-1)^{|S|} = 0\\ & \therefore \sum_{S\subseteq U,S\neq \varnothing}(-1)^{|S|} = -1\\ \end{aligned} \]

      所以上式可以化為:

      \[\begin{aligned} f_S &= \sum_{V\subseteq S,V \neq \varnothing} (-1)^{|V|+1} f_{S\setminus V} [p_{V}] \\ \end{aligned} \]

      容斥系數可以在 \(O(2^n)\) 的時間復雜度內算出,總復雜度子集枚舉為 \(O(3^n + n2^n)\),如果 FWT 則可以優化到 \(O(n^22^n)\)

      代碼

      (子集枚舉。)

      #define Plus_Cat "park"
      #include<bits/stdc++.h>
      #define INF 0x3f3f3f3f
      #define ll long long
      #define RCL(a,b,c,d) memset(a,b,sizeof(c)*(d))
      #define FOR(i,a,b) for(int i(a);i<=(int)(b);++i)
      #define DOR(i,a,b) for(int i(a);i>=(int)(b);--i)
      #define tomax(a,...) ((a)=max({(a),__VA_ARGS__}))
      #define tomin(a,...) ((a)=min({(a),__VA_ARGS__}))
      #define EDGE(g,i,x,y) for(int i=(g).h[(x)],y=(g)[(i)].v;~i;y=(g)[(i=(g)[i].nxt)>0?i:0].v)
      #define main Main();signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);return Main();}signed Main
      using namespace std;
      constexpr int N(18+10),M(153+10),St((1<<18)+10);
      
      namespace IOEcat {
          //Fast IO...
      } using namespace IOEcat;
      
      namespace Modular {
          //Mod Int...
      } using namespace Modular;
      
      bool p[St];
      int n,m,U;
      int u[M],v[M],c[St],f[St];
      
      signed main() {
      #ifdef Plus_Cat
      	freopen(Plus_Cat ".in","r",stdin),freopen(Plus_Cat ".out","w",stdout);
      #endif
      	I(n,m),U=(1<<n)-1,f[0]=1,c[0]=Mod-1;
      	FOR(i,1,m)I(u[i],v[i]),p[1<<(u[i]-1)|1<<(v[i]-1)]=1;
      	FOR(S,1,U)c[S]=(S&1?Mod-c[S^1]:c[S>>1]);
      	FOR(S,1,U)FOR(i,1,n)if((S&1<<(i-1))&&(p[S]|=p[S^1<<(i-1)]))break;
      	FOR(S,1,U)for(int T(S); T; T=(T-1)&S)if(!p[T])toadd(f[S],mul(c[T],f[S^T]));
      	O(mul(f[U],m,Inv2),'\n');
      	return 0;
      }
      

      posted @ 2025-05-23 18:52  Add_Catalyst  閱讀(14)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品麻豆中文字幕| 国产午夜精品久久精品电影| 华人在线亚洲欧美精品| 国产精品毛片在线看不卡| 自拍偷区亚洲综合第二区| 香港日本三级亚洲三级| 国产精品免费看久久久| 亚洲精品国产无套在线观| 四虎影视库国产精品一区| 国产69成人精品视频免费| 国产超高清麻豆精品传媒麻豆精品| 日本三级香港三级三级人妇久| 亚洲国产精品特色大片观看完整版 | 1024你懂的国产精品| 成人亚欧欧美激情在线观看| 国产成人精品日本亚洲专区6 | 国产乱码精品一区二区上| 亚洲夜色噜噜av在线观看 | 国产精品自在自线视频| 国产麻豆剧果冻传媒一区| 罗山县| 午夜男女爽爽影院在线| 久久月本道色综合久久| 奇米四色7777中文字幕| 精品国产一区av天美传媒| 国产成人综合色就色综合| 亚洲精品码中文在线观看| 日韩乱码人妻无码中文字幕视频| 国产一区二区三区四区五区加勒比| 亚洲欧洲av人一区二区| 资源在线观看视频一区二区| 欧美亚洲一区二区三区在线| 无套内谢少妇一二三四| 国产l精品国产亚洲区| 日韩人妻久久精品一区二区| 亚洲欧洲日韩国内高清| 99久久精品费精品国产一区二| 夜夜躁狠狠躁日日躁| 欧美国产精品啪啪| 久久精品青青大伊人av| 国产成人亚洲欧美二区综合|