#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+100;
struct edge
{
int u,v;
}e[N];
inline void read(int &x)
{
x=0;int f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9')
{x=x*10+ch-'0';ch=getchar();}
x*=f;
}
int n,m,cnt=0,h[N],d[N],par[N];
int a[N],ans[N],sum[N];
bool vis[N];
void add(int u,int v)
{
cnt++;
e[cnt].u=h[u];
e[cnt].v=v;
h[u]=cnt;
}
void init(int n)
{
for(int i=1;i<=n;i++)
par[i]=i;
}
int find(int x)
{
if(par[x]==x)
return x;
else
{
par[x]=find(par[x]);
return par[x];
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
read(d[i]);
for(int i=1;i<=m;i++)
{
int u,v;
read(u);read(v);
add(u,v);
add(v,u);
}
for(int i=n;i>=1;i--)
read(a[i]);
init(n);
int maxn=0;
for(int i=1;i<=n;i++)
{
int x=a[i];
for(int j=h[x];j;j=e[x].u)
{
int y=e[i].v;
int fx=find(x),fy=find(y);
if(fx!=fy && !vis[y])
{
sum[fx]+=sum[fy];
par[fy]=fx;
maxn=max(maxn,sum[fy]);
}
}
vis[x]=1;
maxn=max(maxn,sum[find(x)]);
ans[i]=maxn;
}
for(int i=n;i>=1;i--)
cout<<ans[i]<<"\n";
return 0;
}
显示 { "resource": "/home/cjy/vscode/vscode/0908/qd/qd.cpp", "owner": "C/C++", "code": "461", "severity": 8, "message": "非常量引用的初始值必须为左值", "source": "C/C++", "startLineNumber": 43, "startColumn": 14, "endLineNumber": 43, "endColumn": 14 }
{ "resource": "/home/cjy/vscode/vscode/0908/qd/qd.cpp", "owner": "C/C++", "code": "1758", "severity": 8, "message": "应输入“{”以引入 lambda 体", "source": "C/C++", "startLineNumber": 43, "startColumn": 17, "endLineNumber": 43, "endColumn": 18 }