QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#793031 | #9623. 合成大西瓜 | FHQY# | WA | 1ms | 5724kb | C++17 | 1.3kb | 2024-11-29 16:01:35 | 2024-11-29 16:01:35 |
Judging History
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'