Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33575 LYLAKIOI 【BJ】T1 C++ 通过 100 127 MS 28588 KB 1968 2024-10-11 14:41:27

Tests(10/10):


#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; }


测评信息: