QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#607711#5114. Cells Coloringice_cupWA 437ms16900kbC++142.3kb2024-10-03 15:56:122024-10-03 15:56:12

Judging History

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

  • [2024-10-03 15:56:12]
  • 评测
  • 测评结果:WA
  • 用时:437ms
  • 内存:16900kb
  • [2024-10-03 15:56:12]
  • 提交

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=0x3f3f3f3f3f3f3f3f;
	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();
	}	
}

详细

Test #1:

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

input:

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

output:

4

result:

ok 1 number(s): "4"

Test #2:

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

input:

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

output:

2

result:

ok 1 number(s): "2"

Test #3:

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

input:

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

output:

109972100048

result:

ok 1 number(s): "109972100048"

Test #4:

score: 0
Accepted
time: 175ms
memory: 10372kb

input:

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

output:

8437726048

result:

ok 1 number(s): "8437726048"

Test #5:

score: 0
Accepted
time: 419ms
memory: 16900kb

input:

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

output:

18268031127

result:

ok 1 number(s): "18268031127"

Test #6:

score: -100
Wrong Answer
time: 437ms
memory: 15860kb

input:

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

output:

26645125505

result:

wrong answer 1st numbers differ - expected: '25999088192', found: '26645125505'