QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#627611#9424. Stop the Castle 2yhdddRE 105ms16776kbC++143.6kb2024-10-10 16:28:072024-10-10 16:28:07

Judging History

This is the latest submission verdict.

  • [2024-10-10 16:28:07]
  • Judged
  • Verdict: RE
  • Time: 105ms
  • Memory: 16776kb
  • [2024-10-10 16:28:07]
  • 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);
	if(k){
		for(int i=2;i<=lst;i+=2)if(!e[i].w){
			int p=id[i/2];
			vis[p]=1,k--,ans+=2;
			s1[b[p].fi].insert({b[p].se,0});
			s2[b[p].se].insert({b[p].fi,0});
			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});
		}
	}
	if(k){
		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;
		}
	}
	// assert(!k);
	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: 1ms
memory: 9832kb

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: 0
Accepted
time: 105ms
memory: 16776kb

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:

ok ok 1224 cases (1224 test cases)

Test #3:

score: -100
Runtime Error

input:

1
86289 95092 40401
911 152
1 270
135 731
347 451
283 224
338 348
166 346
12 385
590 763
939 176
232 405
122 946
397 576
795 823
546 392
33 718
444 598
954 852
185 662
732 539
172 681
386 148
76 495
163 323
711 201
278 363
531 275
66 122
823 983
234 792
102 188
985 423
804 712
419 636
318 331
693 68...

output:


result: