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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Hnoi2013]消毒

發(fā)布時(shí)間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Hnoi2013]消毒 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

最近在生物實(shí)驗(yàn)室工作的小T遇到了大麻煩。
由于實(shí)驗(yàn)室最近升級(jí)的緣故,他的分格實(shí)驗(yàn)皿是一個(gè)長方體,其尺寸為abc,a、b、c 均為正整數(shù)。為了實(shí)驗(yàn)的方便,它被劃分為abc個(gè)單位立方體區(qū)域,每個(gè)單位立方體尺寸
為111。用(i,j,k)標(biāo)識(shí)一個(gè)單位立方體,1 ≤i≤a,1≤j≤b,1≤k≤c。這個(gè)實(shí)驗(yàn)皿已經(jīng)很久沒有人用了,現(xiàn)在,小T被導(dǎo)師要求將其中一些單位立方體區(qū)域進(jìn) 行消毒操作(每個(gè)區(qū)域可以被重復(fù)消毒)。而由于嚴(yán)格的實(shí)驗(yàn)要求,他被要求使用一種特定 的F試劑來進(jìn)行消毒。 這種F試劑特別奇怪,每次對(duì)尺寸為xyz的長方體區(qū)域(它由xyz個(gè)單位立方體組 成)進(jìn)行消毒時(shí),只需要使用min{x,y,z}單位的F試劑。F試劑的價(jià)格不菲,這可難倒了小 T。現(xiàn)在請(qǐng)你告訴他,最少要用多少單位的F試劑。(注:min{x,y,z}表示x、y、z中的最小 者。)

Input

第一行是一個(gè)正整數(shù)D,表示數(shù)據(jù)組數(shù)。接下來是D組數(shù)據(jù),每組數(shù)據(jù)開頭是三個(gè)數(shù)a,b,c表示實(shí)驗(yàn)皿的尺寸。接下來會(huì)出現(xiàn)a個(gè)b 行c列的用空格隔開的01矩陣,0表示對(duì)應(yīng)的單位立方體不要求消毒,1表示對(duì)應(yīng)的單位立方體需要消毒;例如,如果第1個(gè)01矩陣的第2行第3列為1,則表示單位立方體(1,2,3)需要被消毒。輸入保證滿足abc≤5000,T≤3。

Output

僅包含D行,每行一個(gè)整數(shù),表示對(duì)應(yīng)實(shí)驗(yàn)皿最少要用多少單位 的F試劑。

Sample Input

1
4 4 4
1 0 1 1
0 0 1 1
0 0 0 0
0 0 0 0
0 0 1 1
1 0 1 1
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0

Sample Output

3

HINT

對(duì)于區(qū)域(1,1,3)-(2,2,4)和(1,1,1)-(4,4,1)消毒,分別花費(fèi)2個(gè)單位和1個(gè)單位的F試劑。2017.5.26新加兩組數(shù)據(jù)By Leoly,未重測(cè).

Solution

洛谷的評(píng)測(cè)機(jī)有偉大的神力。。。。

對(duì)于這個(gè)題,有一種鬼畜的偽證,至于是什么不想說了。。。

首先我們可以證明我們一次一定是要消掉一個(gè)面的,也就是消除的部分中的{x,y,z}里面一定有一個(gè)是1,其他兩個(gè)撐到最大,因?yàn)檫@樣可以保證最優(yōu)。

那么我們現(xiàn)在可以繼續(xù)看這道題了。首先考慮這樣一個(gè)算法,假設(shè)這個(gè)題目的要求變成在一個(gè)二維平面上搞,那么明顯,我們把每行每列當(dāng)做點(diǎn),把格子里是否有數(shù)變成邊,不難看出我們現(xiàn)在就是要求這個(gè)題的最小覆蓋集,那么沒的說了,一個(gè)最大流隨便就過了。

然后我們開始考慮三維的,明顯的是,沒有三分圖匹配這種鬼畜的算法,那么怎么辦呢?

題目中有這樣一個(gè)條件,\(a\times b\times c\le 5000\)。隨便開一下根可以發(fā)現(xiàn),這仨數(shù)里面肯定有一個(gè)比17要小,那么就可以搞搞事情了,我們可以把這個(gè)立方體最小的那條邊當(dāng)成高,然后枚舉刪掉哪一層,把沒有刪去的層拍扁到一個(gè)二維平面上,那么就可以在這個(gè)新的二維平面上搞搞二分圖匹配什么的了。

那么我們是不是就輕松A掉了這個(gè)題?

Code1

#pragma comment(linker, "/STACK:1024000000,1024000000") #include <iostream> #include <cstdlib> #include <cmath> #include <string> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <set> #define re register #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) #define pos(i,j,l) ((i-1)*b*c+(j-1)*c+l) #define MAXN 5005 #define MAXM 15011 using namespace std; typedef long long ll; typedef unsigned long long ull; #define ms(arr) memset(arr, 0, sizeof(arr)) const int inf = 0x3f3f3f3f; int n,s,t,cur[MAXN],m; int d[5005],cut[20],a,b,c,cost,minn=100,cnt; int sx[4][5005]; struct po {int nxt,to,w; }edge[MAXM]; int head[MAXN],dep[MAXN],num=-1; inline int read() {int x=0,c=1;char ch=' ';while((ch>'9'||ch<'0')&&ch!='-')ch=getchar();while(ch=='-') c*=-1,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-'0',ch=getchar();return x*c; } inline void add_edge(int from,int to,int w) {edge[++num].nxt=head[from];edge[num].to=to;edge[num].w=w;head[from]=num; } inline void add(int from,int to,int w) {add_edge(from,to,w);add_edge(to,from,0); } inline bool bfs() {for(re int i=s;i<=t;i++)dep[i]=0;queue<int> q;while(!q.empty())q.pop();q.push(s);dep[s]=1;while(!q.empty()){int u=q.front();q.pop();for(re int i=head[u];i!=-1;i=edge[i].nxt){int v=edge[i].to;if(dep[v]==0&&edge[i].w>0){dep[v]=dep[u]+1;if(v==t) return 1;q.push(v);}}}return 0; } inline int dfs(int u,int dis) {if(u==t)return dis;int diss=0;for(re int& i=cur[u];i!=-1;i=edge[i].nxt){int v=edge[i].to;if(edge[i].w!=0&&dep[v]==dep[u]+1){int check=dfs(v,min(dis,edge[i].w));if(check!=0){dis-=check;diss+=check;edge[i].w-=check;edge[i^1].w+=check;if(dis==0) break;}}}return diss; } inline int dinic() {int ans=0;while(bfs()){for(re int i=0;i<=t;i++)cur[i]=head[i];while(int d=dfs(s,inf))ans+=d;}return ans; } inline void get_cut(int x) {memset(cut,0,sizeof(cut));for(re int i=0;i<a;i++){if(x&(1<<i)) cut[i+1]=1,cost++;} } inline void build() {for(re int i=1;i<=b;i++)add(s,i,1);for(re int i=1;i<=c;i++)add(i+b,t,1); } inline void prepare() {for(re int i=s;i<=t;i++) head[i]=-1;num=-1; } inline void copy() {for(re int i=1;i<=cnt;i++)if(!cut[sx[1][i]])add(sx[2][i],sx[3][i]+b,1); } int main() {int T=read();while(T--){a=read();b=read();c=read();int minx=min(a,min(b,c));memset(sx,0,sizeof(sx));cnt=0;for(re int i=1;i<=a;i++)for(re int j=1;j<=b;j++)for(re int l=1;l<=c;l++){int x=read();if(!x) continue;sx[1][++cnt]=i;sx[2][cnt]=j;sx[3][cnt]=l;}if(minx==b) swap(a,b),swap(sx[1],sx[2]);else if(minx==c) swap(a,c),swap(sx[1],sx[3]);s=0,t=b+c+1;for(re int i=0;i<1<<a;i++){cost=0;get_cut(i);if(cost>minn) continue;prepare();copy();build();cost+=dinic();minn=min(minn,cost);}cout<<minn<<endl;minn=100;} }

But

看到這個(gè)Code不同尋常了吧,這個(gè)代碼在洛谷上開著O2A掉了,然后令人驚奇的是,它過不了我自己手造的隨機(jī)數(shù)據(jù)。。然后我把gay的比我快10倍的代碼拿過來測(cè)了測(cè),照樣過不了。。。。然后發(fā)現(xiàn)把圖拍扁的時(shí)候這個(gè)效率有可能退化為\(a*b*c\)的鬼畜效率,光這個(gè)就T掉了。。。。然后。。。看了下題解第一個(gè),發(fā)現(xiàn)是一遍DFS一遍重新構(gòu)造圖。。然后,沒有然后了。

Code2

額,題解代碼,我自己的改來改去太丑了,仔細(xì)看看那個(gè)搜索過程,

#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; inline int read() {int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9')res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res; } const int N = 5005, E = 23, INF = 0x3f3f3f3f; int n, D[5], pos, ecnt, nxt[N], adj[N], go[N], val[N], my[N], X[N][5], Ans, cnt, vis[N], times; bool sel[E]; void add_edge(int u, int v, int w) {nxt[++ecnt] = adj[u]; adj[u] = ecnt; go[ecnt] = v; val[ecnt] = w; } bool dfs(int u) {for (int e = adj[u], v; e; e = nxt[e])if (!sel[val[e]] && vis[v = go[e]] < times) {vis[v] = times;if (!my[v] || dfs(my[v])) {my[v] = u;return 1;}}return 0; } int solve(int tt) {int i, j, ans = 0;for (i = 1; i <= cnt; i++) my[i] = 0;for (i = 1; i <= cnt; i++) {times++;if (dfs(i)) ans++;if (tt + ans >= Ans) return tt + ans;}return tt + ans; } void Dfs(int dep, int tt) {if (dep > D[pos]) return (void) (Ans = min(Ans, solve(tt)));sel[dep] = 1; Dfs(dep + 1, tt + 1);sel[dep] = 0; Dfs(dep + 1, tt); } void work() {int i, j, k, x; n = 0; Ans = INF; cnt = 0;pos = 1; D[1] = read(); D[2] = read(); D[3] = read();if (D[2] < D[pos]) pos = 2; if (D[3] < D[pos]) pos = 3;for (i = 1; i <= 3; i++) if (i != pos) cnt = max(cnt, D[i]);for (i = 1; i <= D[1]; i++) for (j = 1; j <= D[2]; j++)for (k = 1; k <= D[3]; k++) {x = read(); if (x) X[++n][1] = i, X[n][2] = j, X[n][3] = k;}ecnt = 0; for (i = 1; i <= cnt; i++) adj[i] = 0;for (i = 1; i <= n; i++) {if (pos == 1) add_edge(X[i][2], X[i][3], X[i][1]);else if (pos == 2) add_edge(X[i][1], X[i][3], X[i][2]);else add_edge(X[i][1], X[i][2], X[i][3]);}printf("%d\n", (Dfs(1, 0), Ans)); } int main() {int T = read();while (T--) work();return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/victorique/p/9042473.html

總結(jié)

以上是生活随笔為你收集整理的[Hnoi2013]消毒的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情啪啪网 | se日韩| 国产精品一区在线播放 | 黄色特级网站 | 亚洲精品国产精品国自产网站按摩 | √天堂资源地址在线官网 | 美女扣逼喷水视频 | 中国免费毛片 | 欧美一区二区三区不卡视频 | 午夜电影你懂的 | 色在线播放 | 亚洲精品7777| 一道本在线观看视频 | 男生坤坤放进女生坤坤里 | 亚洲一二三四区 | 丰满少妇一区二区三区 | 青青草这里只有精品 | 国产精品jizz视频 | 国产精品美女一区二区三区 | 91香蕉在线视频 | 免费观看理伦片在线播放视频软件 | 亚洲精品国产精品国自产网站按摩 | wwwxx在线 | 国产日韩91 | 在线cao| 天天操天天做 | 可以看av的网址 | 日本黄色片在线播放 | 久久视频国产 | 成在人线av| 亚洲天堂免费看 | 青青草在线视频免费观看 | 91啦中文| 无码人妻久久一区二区三区蜜桃 | 99热在线观看免费精品 | 高清乱码免费网 | 亚洲精品乱码久久久久久蜜桃动漫 | 精品日本一区二区 | 欧美熟妇交换久久久久久分类 | 天天插av | 日日摸日日添日日躁av | 黄色三级大片 | 亚洲美女爱爱 | 中文毛片无遮挡高潮免费 | 99re国产在线 | 日本一本久草 | 亚洲第一综合 | 九九久久综合 | 黄色av日韩 | 欧美性猛交ⅹxx乱大交 | 制服丝袜先锋影音 | av高清在线观看 | 国产视频亚洲 | 久久美女免费视频 | 美国一区二区 | 色妞欧美| 亚洲精品18 | 五月激情六月 | 伊人av在线播放 | 国产丝袜一区二区三区 | 日韩wwww| 久久久久久久久久免费视频 | 91资源站 | 欧洲成人在线视频 | 午夜精品视频在线观看 | 国产在线啪 | 久草视频中文在线 | 亚洲va欧美 | 97se亚洲国产综合在线 | 欧美videos另类极品 | 久久精品三级视频 | 亚洲欧美在线免费 | 影音先锋日韩资源 | 成人中文网 | 国产男女爽爽爽 | 大尺度做爰呻吟62集 | 亚洲精品乱码久久久久久久久久久久 | 天天夜夜人人 | 五月婷婷六月丁香 | 国产偷自拍视频 | 免费一级特黄特色毛片久久看 | 欧美少妇一区二区 | 免费手机av | 欧美三级韩国三级日本三斤在线观看 | 免费在线看污视频 | 殴美一级特黄aaaaaa | av天堂一区 | 欧美精品在线观看一区二区 | www.jizzcom | 天堂影院一区二区 | 男人激烈吮乳吃奶爽文 | 国内自拍视频在线播放 | 丰满人妻一区二区三区大胸 | av黄色网| 成年人爱爱视频 | 亚洲人成777 | 欧美色狠 | 艳妇乳肉亭妇荡乳av | 草久久久久久 |