Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33575 | LYLAKIOI | 【BJ】T1 | C++ | 通过 | 100 | 127 MS | 28588 KB | 1968 | 2024-10-11 14:41:27 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define p_b push_back #define m_p make_pair using namespace std; typedef long long ll; const int maxn=1e5+10; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; }int n,m,col[maxn],t[maxn],vis[maxn]; vector<int>v[maxn]; multiset<int>st[maxn]; void slv(){ n=read(),m=read(); up(i,1,n)t[i]=col[i]=read(),v[i].p_b(i); up(i,1,m){ int x=read(),y=read(); v[x].p_b(y),v[y].p_b(x); }up(i,1,n)for(int x:v[i])st[i].insert(col[x]); queue<pi>q; up(i,1,n)if((*st[i].begin())==(*(--st[i].end())))q.push(m_p(i,(*st[i].begin()))),vis[i]=1; vector<pi>opt; while(!q.empty()){ int u=q.front().p1,w=q.front().p2;q.pop(); //cout<<"opt "<<u<<endl; opt.p_b(m_p(u,w)); for(int x:v[u])if(t[x]!=-1){ //cout<<"test "<<x<<endl; for(int z:v[x])if(!vis[z]){ //cout<<"get "<<z<<endl; st[z].erase(st[z].lower_bound(t[x])); if(st[z].empty())continue; if((*st[z].begin())==(*(--st[z].end())))q.push(m_p(z,(*st[z].begin()))),vis[z]=1; }t[x]=-1; } }reverse(opt.begin(),opt.end()); up(i,1,n)t[i]=0; for(auto it:opt){ int u=it.p1,w=it.p2; for(int x:v[u])t[x]=w;t[u]=w; }up(i,1,n)if(col[i]^t[i]){ //cout<<i<<" "<<col[i]<<" "<<t[i]<<endl; printf("NO");return; }printf("YES\n%d\n",(int)opt.size()); for(auto it:opt)printf("%d %d\n",it.p1,it.p2); }int main(){ //freopen("easy.in","r",stdin); //freopen("easy.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }