QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#793031#9623. 合成大西瓜FHQY#WA 1ms5724kbC++171.3kb2024-11-29 16:01:352024-11-29 16:01:35

Judging History

你现在查看的是最新测评结果

  • [2024-11-29 16:01:35]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5724kb
  • [2024-11-29 16:01:35]
  • 提交

answer

#include<bits/stdc++.h>
#define int long long
#define ll long long
#define endl '\n'
using namespace std;
const int N=1e5+5;
int n,m;
int fa[N],sz[N];
int a[N],b[N],c[N],d[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void merge(int x,int y){
	int fx=find(x);
	int fy=find(y);
	if(fx==fy)return;
	if(sz[fx]>sz[fy])swap(fx,fy);
	fa[fx]=fy;sz[fy]+=sz[fx];
}
bool check(int md){
	for(int i=0;i<=n+1;i++)fa[i]=i,sz[i]=1;
	int c1=0,c2=0;
	for(int i=1;i<=n;i++)if(c[i]>=md)c1++;
	for(int i=1;i<=m;i++)
		if(c[a[i]]<md&&c[b[i]]<md)merge(a[i],b[i]);
	for(int i=1;i<=n;i++)
		if(find(i)==i&&c[i]<md)c2+=(sz[i]+1)%2+1;
//	cout<<c1<<' '<<c2<<endl;
	return c1>c2;
}
void solve(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>c[i];
		d[i]=c[i];
	}
	sort(d+1,d+n+1);
	for(int i=1;i<=m;i++)cin>>a[i]>>b[i];
	int l=1,r=n;
//	cout<<check(2)<<endl;
	while(l<=r){
		int mid=(l+r)>>1;
		if(check(d[mid]))l=mid+1;
		else r=mid-1;
	}
	cout<<d[r]<<endl;
	return ;
}
int T=1;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
//	cin>>T;
	for(int kase=1;kase<=T;kase++){
		solve();
	}
	return 0;
}
/*
7 7
1 1 2 3 1 2 1
1 2
2 3
1 3
2 4
2 5
5 6
5 7

7 7
1 2 2 2 2 2 3
1 2
2 3
1 3
2 4
2 5
5 6
5 7

1 0
1
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5724kb

input:

7 9
1 4 1 3 3 6 7
5 4
3 6
3 4
2 3
5 2
2 6
6 7
5 1
4 6

output:

6

result:

ok single line: '6'

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 5672kb

input:

5 7
1 5 3 1 4
3 5
1 3
5 1
1 4
5 4
2 4
3 2

output:

4

result:

wrong answer 1st lines differ - expected: '5', found: '4'