数据太弱
查看原帖
数据太弱
416975
sbno333楼主2023/10/5 18:23

这道题数据太弱了,我用贪心骗了满分,但不会正解,欢迎大家hack,希望出题人加强数据。

#include<bits/stdc++.h>
using namespace std;
long long n;
struct t{
	long long a,b,c,d;
}v[1009],u[1009];
bool vis[1009][1009];
bool cmp(t a1,t a2){
	return (n-a1.b-a1.c==n-a2.b-a2.c?a1.d>a2.d:n-a1.b-a1.c<n-a2.b-a2.c);
}
bool dfs(long long x,long long y){
	if(v[x].a==0){
		return dfs(x+1,1);
	}
	if(x>n){
		return 1;
	}
	for(long long j=y;j<=n;j++){
		if(j==x){
			continue;
		}
			if(vis[x][j]){
				continue;
			}else{
				//cout<<v[j].d<<" "<<v[i].d<<" "<<v[j].b<<" "<<v[i].a<<endl;
				if(v[j].b&&v[x].a){
					v[j].b--;
					v[x].a--;
					bool kkk;
					kkk=0;
					if(v[x].a){
						kkk=dfs(x,j+1);
					}else{
						kkk=dfs(x+1,1);
					}
						if(kkk){
							cout<<x<<" "<<j<<endl;
							return 1;
						}
						v[j].b++;
					v[x].a++;
					
				}
			}
		}
		    return 0;
}
int main(){
	long long sum;
	sum=0;
	
	cin>>n;
	for(long long i=1;i<=n;i++){
		cin>>v[i].b;
		sum+=v[i].b;
		v[i].d=i;
	}
	for(long long i=1;i<=n;i++){
		cin>>v[i].a;
	}
	long long m;
	cin>>m;
	for(long long i=1;i<=m;i++){
		long long x,y;
		cin>>x>>y;
		vis[x][y]=1;
		v[y].c++;
	}
	cout<<sum<<endl;
	if(n<=10){
		if(dfs(1,1))
		    return 0;
		//return 0;
	}
	for(long long j=1;j<=n;j++){
		u[j]=v[j];
	}
	for(long long i=1;i<=n;i++){
		for(long long j=1;j<=n;j++){
			v[j]=u[j];
		}
		swap(v[1],v[i]);
		sort(v+2,v+1+n,cmp);
		for(long long j=2;j<=n;j++){
			if(vis[v[1].d][v[j].d]){
				v[j].c--;
			}else{
				//cout<<v[j].d<<" "<<v[i].d<<" "<<v[j].b<<" "<<v[i].a<<endl;
				if(v[j].b&&v[1].a){
					cout<<v[1].d<<" "<<v[j].d<<endl;
					v[j].b--;
					v[1].a--;
				}
			}
			u[v[j].d]=v[j];
		}
	}
	return 0;
}
2023/10/5 18:23
加载中...