| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38457 | 氩_wjy | 【S】T3 | C++ | 解答错误 | 15 | 2531 MS | 173964 KB | 1305 | 2025-10-08 15:12:41 |
#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],IE[N]; int Ind[N],Ans[N]; inline bool cmp(int x,int y){return a[x]<a[y];} 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(),cmp); ret.erase(unique(ret.begin(),ret.end()),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; 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; }