QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#607731#5114. Cells Coloringice_cupAC ✓611ms16080kbC++142.3kb2024-10-03 16:01:292024-10-03 16:01:29

Judging History

你现在查看的是最新测评结果

  • [2024-10-03 16:01:29]
  • 评测
  • 测评结果:AC
  • 用时:611ms
  • 内存:16080kb
  • [2024-10-03 16:01:29]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MID int mid=(l+r)>>1;
#define ls p<<1
#define rs p<<1|1
int inf=0x3f3f3f3f;
struct dinic__b_y__i__c__e____c__u__p{
	#define pn 70100
	#define en 1001000
	int head[pn],to[en],nxt[en],v[en],cv[en],cnt=1;
	int d[pn],vis[pn],s,t,cur[pn];
	void ad(int u,int e,int val){
		nxt[++cnt]=head[u];
		to[cnt]=e;
		v[cnt]=val;
		head[u]=cnt;
	}
	void add(int u,int e,int val){
		// cout<<u<<' '<<e<<' '<<val<<' '<<co<<endl;
		ad(u,e,val);
		ad(e,u,0);
	}
	queue<int>q;
	bool bfs(){
		while(!q.empty())q.pop();
		memset(d,0,sizeof(d));
		d[s]=1;q.push(s);cur[s]=head[s];
		while(!q.empty()){
			int u=q.front();q.pop();
			for(int i=head[u];i;i=nxt[i]){
				if(!d[to[i]]&&v[i]){
					cur[to[i]]=head[to[i]];
					d[to[i]]=d[u]+1;
					if(to[i]==t)return 1;
					q.push(to[i]);
				}
			}
		}
		return 0;
	}
	int dfs(int u,int flow){
		if(u==t||flow<=0)return flow;
		int re=0;
		for(int &i=cur[u];i;i=nxt[i]){
			if(d[to[i]]!=d[u]+1||!v[i])continue;
			int tmp=dfs(to[i],min(flow,v[i]));
			flow-=tmp,v[i]-=tmp;
			re+=tmp,v[i^1]+=tmp;
			if(!flow)break;
		}
		return re;
	}
	int dinic(){
		int ans=0;
		while(bfs()){
			// cout<<ans<<endl;
			ans+=dfs(s,inf);
		}
		return ans;
	}
	void clear(){
		memset(head,0,sizeof(head));
		cnt=1;
	}
	void cp(){
		memcpy(cv,v,sizeof(v));
	}
	void remake(){
		memcpy(v,cv,sizeof(cv));
	}
}din;
int n,m,c,d;
char s[510][510];
int id[510][510],idl[510],idr[510],edl[510],edr[510],tot;
void solve(){
	cin>>n>>m>>c>>d;
	int num=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>s[i][j];
			id[i][j]=++tot;
		}
	}
	din.s=++tot,din.t=++tot;
	for(int i=1;i<=n;i++)idl[i]=++tot,din.add(din.s,idl[i],0),edl[i]=din.cnt-1;
	for(int i=1;i<=m;i++)idr[i]=++tot,din.add(idr[i],din.t,0),edr[i]=din.cnt-1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(s[i][j]=='.'){
				num++;
				din.add(idl[i],id[i][j],1);
				din.add(id[i][j],idr[j],1);
			}
		}
	}
	ll ans=1ll*d*num;
	for(int k=1;k<=max(n,m);k++){
		for(int i=1;i<=n;i++)din.v[edl[i]]++;
		for(int i=1;i<=m;i++)din.v[edr[i]]++;
		num-=din.dinic();
		ans=min(ans,1ll*c*k+1ll*d*num);
	}
	cout<<ans;
}
int main(){
	// ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
	int T;
	// cin>>T;
	T=1;
	while(T--){
		solve();
	}	
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 8024kb

input:

3 4 2 1
.***
*..*
**..

output:

4

result:

ok 1 number(s): "4"

Test #2:

score: 0
Accepted
time: 0ms
memory: 9988kb

input:

3 4 1 2
.***
*..*
**..

output:

2

result:

ok 1 number(s): "2"

Test #3:

score: 0
Accepted
time: 144ms
memory: 11504kb

input:

250 250 965680874 9042302
..**.*****..**..**.*****..***..***.**......*.***.*...***.*....*.**.*.**.*.*.****...*.******.***.************....**.*..*..***.*******.*.***.*..**..****.**.*.*..***.****..**.....***.....*.****...*...*.***..****..**.*.*******..*.*******.*.*.*.****.*.***
....**.*******.*.******...

output:

109972100048

result:

ok 1 number(s): "109972100048"

Test #4:

score: 0
Accepted
time: 184ms
memory: 15704kb

input:

250 250 62722280 506434
*.**.***.*.*....*....*...**.*..**..****.*.*..*.*.*..*.....**..*.*.*.*****.*.**..*.**....***..*..*.*.*.**.*..*..*.**..*...**....**..*.*.***.*****.*****.***..**.***.****....*.*.**.**.*...****....*..*.**.**********.......********...***.**..*.....**.*..*
.*..********..*...*..****...

output:

8437726048

result:

ok 1 number(s): "8437726048"

Test #5:

score: 0
Accepted
time: 457ms
memory: 16080kb

input:

250 250 85956327 344333
..*.............*...*.....*...*..........*.........*...*.......*..***......*.*........*.*........*........*..*..*.............*.*........*....*..*................***...................*..*.............*..*.....*..**..............*..*......*.....*..**
.........*......*.*.........

output:

18268031127

result:

ok 1 number(s): "18268031127"

Test #6:

score: 0
Accepted
time: 494ms
memory: 15844kb

input:

250 250 768323813 489146
...*................*...........*.................*..***..*.......*..*......*.................*...*.........*.*.*.*...*.*.*.*.*.......*........*.............*...............*..*.............*.*...*.....................**.....**.....*.*........*......
...................*.......

output:

25999088192

result:

ok 1 number(s): "25999088192"

Test #7:

score: 0
Accepted
time: 126ms
memory: 10952kb

input:

250 250 865365220 7248935
.....**.*.***...**.**...*.**.*****..****.**.**.*...*..**....*.**.*..**..*..*.****....***.***.*...*.*.*.**..****.***.*.**..*****.**..*.*.***..***.*..*.*..*......*.*******.*******.*..*.******.....**.***...*****...*...**....**.**.*...*...**.*.*****...*.
*..*.**.*...****.*.**.*...

output:

97440874100

result:

ok 1 number(s): "97440874100"

Test #8:

score: 0
Accepted
time: 24ms
memory: 14388kb

input:

153 225 485767021 308782855
.*.**.***..***..***..****.*****.***.....*.***.****.*.*......**......****.****.**.******...**...*.***.*..**.*****.****....*.*.*...**..****.**.******....*....****....**.*.*****.**.**.**.***...*.**.*.**.****.*.*....*.*****...***
*.*....*...*.*..*.*****.***.***.***.***..*.***...

output:

54405906352

result:

ok 1 number(s): "54405906352"

Test #9:

score: 0
Accepted
time: 3ms
memory: 12108kb

input:

17 20 823772868 410753944
.....*......**......
.......*............
...............*....
......*.............
...................*
*........*.*..*.....
.....*.............*
..*..........*.*....
.......*............
...**...........**.*
....................
**......**.......*..
.*.............*....
....

output:

16062438436

result:

ok 1 number(s): "16062438436"

Test #10:

score: 0
Accepted
time: 38ms
memory: 9220kb

input:

227 129 426009970 614728889
*..****..*..*.********.*.*..***.*.*..**..*.***.**.**.***..*.***..*..*.***.*.*.**..*****.**..***.*.****.**.***.****..**.**.*.**.**
*...*****.**....****..*....*.*.**.*****.*..*****...*...**...******..****.*..**...***.*.*.*..*.*.*..*.******.*****..*.**********.*
.*.*..**..**...

output:

49843166490

result:

ok 1 number(s): "49843166490"

Test #11:

score: 0
Accepted
time: 52ms
memory: 10628kb

input:

170 219 28214303 818736602
*..*....*..*..*....**.*...*..*.**....**.*..*........*.**.....*....*.*..*..*.**.....*..***......*.....*...*........**.*.*.***...*........**..**....***...**....*.*..........**....*....**.***....*.*.*..*..***.....*.*..***.
.*.*.....**...*..*....*.*....*.*.**.........*...*..*....

output:

4514288480

result:

ok 1 number(s): "4514288480"

Test #12:

score: 0
Accepted
time: 2ms
memory: 8608kb

input:

221 2 186883458 764869506
*.
.*
**
.*
**
**
*.
.*
.*
.*
*.
.*
..
**
**
*.
..
.*
.*
**
**
*.
.*
*.
..
*.
**
.*
**
..
**
..
**
..
.*
*.
**
.*
.*
**
..
.*
**
**
**
**
.*
..
.*
.*
..
**
.*
**
.*
**
..
**
*.
**
..
.*
*.
.*
**
.*
**
..
.*
**
.*
**
**
.*
**
**
.*
**
**
..
..
.*
**
..
**
.*
*.
*.
*.
*.
*.
*...

output:

17753928510

result:

ok 1 number(s): "17753928510"

Test #13:

score: 0
Accepted
time: 0ms
memory: 11932kb

input:

28 2 127093639 70848307
.*
.*
**
..
..
.*
**
*.
**
..
**
*.
*.
**
*.
..
.*
.*
*.
**
**
.*
**
..
*.
.*
**
**

output:

1468878336

result:

ok 1 number(s): "1468878336"

Test #14:

score: 0
Accepted
time: 4ms
memory: 10504kb

input:

142 1 465099485 99077573
*
.
.
*
*
*
*
*
.
*
.
*
.
*
.
.
.
.
*
*
*
*
*
.
*
.
.
*
*
*
.
*
.
.
.
.
.
*
*
*
*
*
*
*
*
.
*
.
*
.
.
*
*
.
*
*
*
*
.
.
*
*
.
*
*
*
*
*
*
*
.
.
.
*
*
*
*
*
*
.
*
.
*
.
*
*
*
*
.
.
.
*
*
.
*
.
.
*
.
*
.
.
.
*
.
.
*
.
.
.
.
*
.
*
.
*
*
*
*
*
*
*
.
*
*
*
*
.
*
.
.
.
.
*
.
*
*
....

output:

5845576807

result:

ok 1 number(s): "5845576807"

Test #15:

score: 0
Accepted
time: 184ms
memory: 13008kb

input:

250 250 420456041 0
...*****.....****......*.**..*..*.**.**...*.***..**.*......*.*.....**..*..**.*..***.*.****.*.**.*.....**..*.*.**....**..***......*...***..*...****.*****.*.***.**.*.*...****.***..*...*.*.**.***..*.***.*.****.*.*...**....***....*.*.**....***...*.***...
*.**...**.**...*..*..*.*.*.**...

output:

0

result:

ok 1 number(s): "0"

Test #16:

score: 0
Accepted
time: 518ms
memory: 15464kb

input:

250 250 0 577876919
.............**.*.....*.....*.*..*.......*...*.................**........*........*....*...*.......*...*........................*.......*.....*.*.*.......*........................*...............*..*.*....*.*.*..................*.....................
...*...*...................*....

output:

0

result:

ok 1 number(s): "0"

Test #17:

score: 0
Accepted
time: 7ms
memory: 12624kb

input:

250 250 708109405 398540228
**********************************************************************************************************************************************************************************************************************************************************
*********************...

output:

0

result:

ok 1 number(s): "0"

Test #18:

score: 0
Accepted
time: 603ms
memory: 14832kb

input:

250 250 1000000000 1000000
..........................................................................................................................................................................................................................................................
.........................

output:

62500000000

result:

ok 1 number(s): "62500000000"

Test #19:

score: 0
Accepted
time: 611ms
memory: 12816kb

input:

250 250 1000000000 10000000
..........................................................................................................................................................................................................................................................
........................

output:

250000000000

result:

ok 1 number(s): "250000000000"