标签:cli set bsp one eof 技术 sizeof 图片 维护
因为我要目标值和真实值相同,所以肯定要按目标值大小排序,从小往大排,否则直接就冲突了
之后对于每个节点维护一格mx表示当前周围被填了的mex值,之后对比可以知道是否成功
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; typedef long long ll; int h[N],ne[N],e[N],idx; int mx[N]; int ans[N]; struct node{ int k,w; }s[N]; void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++; } bool cmp(node a,node b){ return a.w<b.w; } int main(){ int n,m; cin>>n>>m; memset(h,-1,sizeof h); while(m--){ int a,b; scanf("%d%d",&a,&b); add(a,b); add(b,a); } int i; for(i=1;i<=n;i++){ scanf("%d",&s[i].w); s[i].k=i; } sort(s+1,s+1+n,cmp); int sign=0; for(i=1;i<=n;i++){ int x=s[i].k; int tmp=mx[x]; if(tmp!=s[i].w-1){ cout<<-1<<endl; sign=1; break; } ans[i]=x; for(int j=h[x];j!=-1;j=ne[j]){ int k=e[j]; if(mx[k]==s[i].w-1) mx[k]=s[i].w; } } if(!sign){ for(i=1;i<=n;i++){ printf("%d ",ans[i]); } cout<<endl; } }
标签:cli set bsp one eof 技术 sizeof 图片 维护
原文地址:https://www.cnblogs.com/ctyakwf/p/13235937.html