提交时间:2025-10-08 15:10:00

运行 ID: 38455

#include<bits/stdc++.h> #define int long long #define vi vector<int> using namespace std; const int N=5e5+7,w=127; int n,m,a[N]; vi vc[N]; vi E[N],IE[N]; int Ind[N],Ans[N]; inline vi Merge(vi u,vi v){ vi ret;ret.clear(); for(auto x:u)ret.push_back(x); for(auto x:v)ret.push_back(x); sort(ret.begin(),ret.end()); ret.resize(min((int)ret.size(),w));return ret; } signed main(){ #ifndef ONLINE_JUDGE freopen("stone.in","r",stdin); freopen("stone.out","w",stdout); #endif cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=m;i++){ int u,v;cin>>u>>v; E[u].push_back(v),IE[v].push_back(u);Ind[u]++; }for(int i=1;i<=n;i++)vc[i].push_back(i); queue<int> q; for(int i=1;i<=n;i++)if(!Ind[i])q.push(i); while(!q.empty()){ int u=q.front();q.pop(); for(auto v:IE[u]){ vc[v]=Merge(vc[v],vc[u]);--Ind[v]; if(!Ind[v])q.push(v); } }for(int i=1;i<=n;i++){ Ans[i]=-1; for(int x=0;x<vc[i].size();x++)for(int y=x+1;y<vc[i].size();y++)Ans[i]=max(Ans[i],a[vc[i][x]]&a[vc[i][y]]); }for(int i=1;i<=n;i++)cout<<Ans[i]<<" ";cout<<endl; return 0; }