dalao求条悬2关注40pts
查看原帖
dalao求条悬2关注40pts
1063855
xu_zhihao楼主2025/6/30 22:52
#include<bits/stdc++.h>
#define int long long
#define ULL unsigned long long
using namespace std;
const int N=1e6+10;
int a[N],p[N],q[N],b[70];
ULL p2[70];
vector<int>f[100];
int can[70];
unordered_map<int,bool>mp;
void init(){
	p2[0]=1;
	for(int i=1;i<=63;i++)p2[i]=p2[i-1]*2;
	//cout<<p2[63]<<endl;
	return;
}
signed main(){
	init();
	int n,m,c,k;
	scanf("%lld%lld%lld%lld",&n,&m,&c,&k);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		//cout<<a[i]<<endl;
		ULL k=a[i];
		for(int j=63;j>=0;j--){
			if(k>=p2[j]){
				k-=p2[j];
				b[j]=1;
				//cout<<a[i]<<" "<<j<<endl;
			}
		}
		//cout<<endl;
	}
	for(int i=1;i<=m;i++){
		scanf("%lld%lld",&p[i],&q[i]);
		f[p[i]].push_back(q[i]);
	}
	for(int i=0;i<=63;i++){
		//cout<<b[i]<<" "; 
		if(!b[i])continue;
		for(int to:f[i])mp[to]=1;
	} 
	//cout<<endl;
	int x=0;
	for(int i=1;i<=m;i++){
		if(!mp[q[i]]){
			if(!can[i])x++;
			can[p[i]]=1;
		}
	}
	x=k-x;
	ULL ans=p2[x]-n;
	printf("%llu\n",ans);
	return 0;
} 
2025/6/30 22:52
加载中...