牛客練習賽53 德育分博弈政治課 網路流

2021-09-28 14:27:22 字數 1332 閱讀 8077

題目大意

給出n個只有六個面的骰子

每個面由1~9 中的數字組成

每個面的數字不同

給出q次詢問

每次給出乙個串,

要求用n個骰子擺出串的形狀

題目分析

因為每個骰子只能表示乙個面

類似乙個由限制的問題

考慮網路流中的乙個點

如果它的進入的流量為1 就能限制它在與它相連的點中只選擇乙個。

那麼我們考慮建這樣乙個圖

每個數字到匯點的權值應該是查詢串中這個數字出現的次數

然後,只要我們能跑乙個滿流,問題就可以解決了

但是給出的n太大了。有5e5 ,是沒有辦法跑網路流的。

但是我們發現所有的骰子的種類數只有c(9,6)

所以,我們可以發現,對骰子進行壓縮,把相同的骰子看作乙個點,邊權是這種骰子的個數,那麼這個圖就可以縮小了

**詳解

#include using namespace std;

const int inf = 0x3f3f3f3f;

const int n = 5e5+50,m = 5e6+50;

int n,m,s,t,tot,maxflow;

int head[m],ver[m],edge[m],nxt[m],d[n];

queueq;

void add(int x,int y,int z)

bool bfs()}}

return 0;

}int dinic(int x,int flow)

} return flow-rest;

}int cnt[10];

char ch[n][7],query[m];

int idx = 0;

mapmp;

int num[5000];

int id=0;

void getcnt(char x[m])

tot = 1; s=0;t=n+20;

memset(head,0,sizeof(head));

memset(nxt,0,sizeof(nxt));

int idx = 10;

for(int j=1;j<=9;j++)

for(int j=1;j<=id;j++)

{//cout<<2注:

**已修改

牛客練習賽53 ABC

a 簡單dp include define ll long long using namespace std const ll mod 1e9 7 ll d 1000000 2 ll n intmain cout d n 1 d n 0 mod return0 b 分塊 include define...

牛客練習賽53 B, C, E 題解

b 美味果凍 更換一下列舉順序得到 容易發現 i 為 j,2j 2j,3j t 1 j,t j 時後面向下取整的結果是一樣的,分塊計算即可,j 次冪通過 j 1 次冪 o 1 得到,時間複雜度為 o nlogn include using namespace std typedef long lon...

牛客練習賽53(C題)

題目描述 有n個長度為m的文字串,每個串只含有 0 和 1 接下來有q次詢問,每次給出乙個長度為m的字串,且只含有 0 1 和 如10 1 1。下劃線可以匹配 0 或 1 即10 1 1可以匹配101111,101101,100111,100101四種串。每次詢問求出n個文字串中有多少個可以與當前詢...