WA on test 7求助
查看原帖
WA on test 7求助
580608
lupengheyyds楼主2024/6/24 16:08
#include<bits/stdc++.h>
using namespace std;
const int NN=2005;
const long long INF=0x3f3f3f3f3f3f3f3f;
typedef pair<int,int> pa;
struct Node{
	long long to,val,fan;
};
vector<Node> ed[NN];
int n,m,s,t;
long long maxflow,ans;
queue<int> q;
int dep[NN],gap[NN],now[NN];
void BFS(){
	q.push(t);dep[t]=1;
	while(!q.empty()){
		int x=q.front();q.pop();
		gap[dep[x]]++;
		for(Node eg:ed[x]){
			int y=eg.to;
			if(dep[y]||eg.val)continue;
			dep[y]=dep[x]+1;
			q.push(y);
		}
	}
	return;
}
long long Dinic(int x,long long flow){
	if(x==t)return flow;
	long long rest=flow;
	for(int &i=now[x];i<ed[x].size();i++){
		int y=ed[x][i].to;
		if(!ed[x][i].val||dep[y]+1!=dep[x])continue;
		long long k=Dinic(y,min((long long)ed[x][i].val,rest));
		ed[x][i].val-=k;
		ed[y][ed[x][i].fan].val+=k;
		rest-=k;
		if(!rest)return flow;
	}
	if(!--gap[dep[x]])dep[s]=t+1;
	gap[++dep[x]]++;now[x]--;
	return flow-rest;
}
void Add(int u,int v,long long w){
	ed[u].push_back({v,w,ed[v].size()});
	ed[v].push_back({u,0,ed[u].size()-1});
	return;
}
int x[NN],y[NN],w[NN];
unordered_map<int,unordered_map<int,int> > mp;
pa d1[8]={{-1,0},{-1,0},{-1,0},{-1,0},{1,0},{1,0},{1,0},{1,0}},
   d2[8]={{0,-1},{0,-1},{0,1},{0,1},{0,-1},{0,-1},{0,1},{0,1}},
   d3[8]={{-1,-1},{1,-1},{-1,1},{1,1},{1,-1},{-1,-1},{1,1},{-1,1}};
int main(){
	cin>>n;
	s=2*n+1,t=s+1;
	for(int i=1;i<=n;i++){
		cin>>x[i]>>y[i]>>w[i];
		mp[x[i]][y[i]]=i;
		ans+=w[i];
		Add(i,i+n,w[i]);
	}
	for(int i=1;i<=n;i++){
		if(x[i]%2||y[i]%2)continue;
		for(int j=0;j<8;j++){
			int n1=mp[x[i]+d1[j].first][y[i]+d1[j].second],
				n2=mp[x[i]+d2[j].first][y[i]+d2[j].second],
				n3=mp[x[i]+d3[j].first][y[i]+d3[j].second];
			if(n1&&n2&&n3)
				Add(s,i,INF),Add(i+n,n1,INF),Add(n1+n,n2,INF),Add(n2+n,n3,INF),Add(n3+n,t,INF);
		}
	}
	BFS();
	while(dep[s]<=t){
		memset(now,0,sizeof now);
		maxflow+=Dinic(s,INF);
	}
	cout<<ans-maxflow;
	return 0;
}
2024/6/24 16:08
加载中...