QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#627560#9424. Stop the Castle 2yhdddWA 100ms14948kbC++143.5kb2024-10-10 16:19:242024-10-10 16:19:24

Judging History

This is the latest submission verdict.

  • [2024-10-10 16:19:24]
  • Judged
  • Verdict: WA
  • Time: 100ms
  • Memory: 14948kb
  • [2024-10-10 16:19:24]
  • Submitted

answer

#include<bits/stdc++.h>
#define int long long
#define mod 998244353ll
#define pii pair<int,int>
#define fi first
#define se second
#define mems(x,y) memset(x,y,sizeof(x))
#define pb push_back
#define db double
using namespace std;
const int maxn=100010;
const int inf=1e18;
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
	return x*f;
}
bool Mbe;

int n,m,k;
pii a[maxn],b[maxn];
bool vis[maxn];
map<int,set<pii>> s1,s2;
int head[maxn<<1],tot=1;
struct nd{
	int nxt,to,w;
}e[maxn<<2];
void add(int u,int v,int w){
	e[++tot]={head[u],v,w};head[u]=tot;
	e[++tot]={head[v],u,0};head[v]=tot;
}
int s,t,flow;
int dis[maxn],rad[maxn];
queue<int> q;
bool bfs(){
	for(int i=1;i<=t;i++)dis[i]=0,rad[i]=head[i];
	dis[s]=1,q.push(s);
	while(!q.empty()){
		int u=q.front();q.pop();
		for(int i=head[u];i;i=e[i].nxt){
			int v=e[i].to;
			if(e[i].w&&!dis[v]){
				dis[v]=dis[u]+1,q.push(v);
			}
		}
	}
	return dis[t];
}
int dfs(int u,int res){
	if(u==t)return res;
	int cnt=0;
	for(int i=rad[u];i;i=e[i].nxt){
		int v=e[i].to;rad[u]=i;
		if(e[i].w&&dis[v]==dis[u]+1){
			int out=dfs(v,min(e[i].w,res));
			res-=out,cnt+=out;
			e[i].w-=out,e[i^1].w+=out;
			if(!res)break;
		}
	}
	return cnt;
}
int id[maxn],ans,sum;
void work(){
	n=read();m=read();k=m-read();
	for(int i=1;i<=n;i++)a[i]={read(),read()};
	for(int i=1;i<=m;i++)b[i]={read(),read()};
	for(int i=1;i<=m;i++)vis[i]=0;
	s1.clear();for(int i=1;i<=n;i++)s1[a[i].fi].insert({a[i].se,i});
	s2.clear();for(int i=1;i<=n;i++)s2[a[i].se].insert({a[i].fi,i});
	s=2*n+1,t=2*n+2;
	for(int i=1;i<=t;i++)head[i]=0;tot=1;
	for(int i=1;i<=m;i++){
		if(s1.find(b[i].fi)==s1.end()||s2.find(b[i].se)==s2.end())continue;
		auto it=s1[b[i].fi].lower_bound({b[i].se,0});
		if(it==s1[b[i].fi].end())continue;
		if(it==s1[b[i].fi].begin())continue;
		int u=(*--it).se;
		it=s2[b[i].se].lower_bound({b[i].fi,0});
		if(it==s2[b[i].se].end())continue;
		if(it==s2[b[i].se].begin())continue;
		int v=(*--it).se;
		add(u,v+n,1),id[tot/2]=i;
	}
	int lst=tot;
	for(int i=1;i<=n;i++)add(s,i,1),add(i+n,t,1);
	flow=ans=sum=0;
	for(auto[x,s]:s1)sum+=s.size()-1;
	for(auto[x,s]:s2)sum+=s.size()-1;
	while(bfs())flow+=dfs(s,inf);
	ans=flow*2;
	if(k){
		for(int i=2;i<=lst;i+=2)if(!e[i].w){
			vis[id[i/2]]=1,k--;
			if(!k)break;
		}
	}
	if(k){
		for(int i=1;i<=m;i++)if(!vis[i]){
			if(s1.find(b[i].fi)==s1.end())continue;
			auto it=s1[b[i].fi].lower_bound({b[i].se,0});
			if(it==s1[b[i].fi].end())continue;
			if(it==s1[b[i].fi].begin())continue;
			if(!(*it).se||!(*--it).se)continue;
			vis[i]=1,k--,++ans;
			if(!k)break;
			s1[b[i].fi].insert({b[i].se,0});
		}
		for(int i=1;i<=m;i++)if(!vis[i]){
			if(s2.find(b[i].se)==s2.end())continue;
			auto it=s2[b[i].se].lower_bound({b[i].fi,0});
			if(it==s2[b[i].se].end())continue;
			if(it==s2[b[i].se].begin())continue;
			if(!(*it).se||!(*--it).se)continue;
			vis[i]=1,k--,++ans;
			if(!k)break;
			s2[b[i].se].insert({b[i].fi,0});
		}
	}
	if(k){
		for(int i=1;i<=m;i++)if(!vis[i]){
			vis[i]=1,k--;
			if(!k)break;
		}
	}
	printf("%lld\n",sum-ans);
	for(int i=1;i<=m;i++)if(!vis[i])printf("%lld ",i);puts("");
}

// \
444

bool Med;
int T;
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	
//	cerr<<(&Mbe-&Med)/1048576.0<<" MB\n";
	
	T=read();
	while(T--)work();
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 9888kb

input:

3
8 6 4
1 3
2 1
2 6
4 1
4 7
6 1
6 3
6 6
2 3
3 1
4 3
4 6
5 2
6 4
3 2 1
10 12
10 10
10 11
1 4
1 5
1 3 2
1 1
2 1
2 2
2 3

output:

4
2 3 5 6 
2
2 
0
2 3 

result:

ok ok 3 cases (3 test cases)

Test #2:

score: -100
Wrong Answer
time: 100ms
memory: 14948kb

input:

1224
11 17 14
7 3
4 2
8 13
3 15
3 4
5 11
10 2
3 3
8 6
7 11
2 3
10 4
1 3
12 1
2 5
11 9
11 6
11 10
8 15
1 5
9 14
4 11
1 6
10 7
7 6
11 4
8 4
1 11
18 3 2
14 8
2 14
13 13
9 12
14 12
5 6
8 1
10 5
8 6
8 9
6 6
7 5
12 11
6 11
13 5
1 10
7 6
14 5
6 15
2 4
11 1
1 6 4
14 14
13 9
9 3
10 12
7 5
8 13
9 14
1 9 8
4 9...

output:

7
3 4 5 6 7 8 9 10 11 12 13 15 16 17 
15
2 3 
0
3 4 5 6 
0
2 3 4 5 6 7 8 9 
11
1 3 
8
1 2 3 
0
1 2 3 4 5 6 7 8 9 10 11 12 
1
5 6 7 9 10 11 12 
8
17 18 19 
1
1 2 3 4 5 6 7 8 
7
6 8 
10
13 14 15 
1
10 11 12 13 14 15 16 17 18 19 20 
0
1 
1
2 3 
0
5 6 7 
7
8 12 13 14 15 
2
10 11 12 13 14 
4
3 4 5 6 7 8 ...

result:

wrong answer Participant states the answer to be 2 but is actually 3 (test case 48)