Pagini recente » Cod sursa (job #1240458) | Cod sursa (job #3138080) | Cod sursa (job #864604) | Cod sursa (job #3207819) | Cod sursa (job #2924526)
#include <bits/stdc++.h>
using namespace std;
vector<int>adj[200005];
struct DSU{
vector<int>Rank;
vector<int>Parent;
DSU(int n) {
Rank.assign(n, 0);
Parent.assign(n, 0);
for(int i=0;i<n;i++) {
Rank[i] = 1;
}
for(int i=0;i<n;i++) {
Parent[i] = i;
}
}
int getparent(int x) {
if(x==Parent[x]) return x;
return Parent[x]=getparent(Parent[x]);
}
void unite(int a, int b) {
a = getparent(a);
b = getparent(b);
if (Rank[b]<Rank[a]) swap(a,b);
if (Rank[a]==Rank[b]) Rank[b]++;
Parent[a]=b;
}
bool check(int a,int b) {
return getparent(a)==getparent(b);
}
};
int main()
{
ifstream cin("closing.in");
ofstream cout("closing.out");
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++)
{
int a,b;
cin>>a>>b;
a--;
b--;
adj[a].push_back(b);
adj[b].push_back(a);
}
vector<int>v(n);
vector<int>seen(n);
vector<int>f(n);
DSU h(n);
for(int i=n-1;i>=0;i--)
cin>>v[i];
int ma=0;
for(int i=0;i<n;i++)
{
v[i]--;
seen[v[i]]=1;
int f2=0;
int ok=0;
for(int j=0;j<adj[v[i]].size();j++)
{
if(seen[adj[v[i]][j]]==1)
{ok=1;
if(h.getparent(adj[v[i]][j])!=h.getparent(v[i]))
{
f2+=f[h.getparent(adj[v[i]][j])];
f[h.getparent(adj[v[i]][j])]=0;
h.unite(v[i],adj[v[i]][j]);
}
}
}
// if(ok==0)
f2++;
int daddy=h.getparent(v[i]);
f[daddy]+=f2;
ma=max(ma,f[daddy]);
//cout<<f[daddy]<<'\n';
if(ma==i+1)
{
v[i]=1;
}
else
{
v[i]=0;
}
// cout<<v[i]<<" ";
}
for(int i=n-1;i>=0;i--)
{
//cout<<v[i];
if(v[i]==1)
cout<<"YES";
else
cout<<"NO";
cout<<'\n';
}
return 0;
}