```cpp
#include<bits/stdc++.h>
#define R register int
#define gc getchar
using namespace std;
int n,m,Q,u[1000005],v[1000005],ans[1000005],Ans;
int edge_num,head[1000005];
int dis[1000005],vis[1000005],d[1000005],del[1000005];
int judge[10000007],tmp;
struct Edge{
int to,next;
}edge[4000020];
void add(int u,int v)
{
edge[++edge_num].next=head[u];
edge[edge_num].to=v;
head[u]=edge_num;
edge[++edge_num].next=head[v];
edge[edge_num].to=u;
head[v]=edge_num;
/* edge[edge_num].to=v,edge[edge_num].next=head[u];
head[u]=edge_num++;
edge[edge_num].to=u,edge[edge_num].next=head[v];
head[v]=edge_num++;*/
}
/**/
void dijkstra()
{
memset(dis,0x3f3f3f3f,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[1]=0;
priority_queue<pair<int,int> >q;
q.push(make_pair(1,0));
while(q.size())
{
int x=q.top().first;q.pop();
if(vis[x])continue;
vis[x]=1;
for(R i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(dis[y]>dis[x]+1)
{
dis[y]=dis[x]+1;
q.push(make_pair(y,-dis[y]));
}
}
}
}
void dijkstra2()
{
memset(d,0x3f3f3f3f,sizeof(d));
memset(vis,0,sizeof(vis));
d[1]=0;
priority_queue<pair<int,int> >q;
q.push(make_pair(1,0));
while(q.size())
{
int x=q.top().first;q.pop();
if(vis[x])continue;
vis[x]=1;
for(R i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(d[y]>d[x]+1)
{
d[y]=d[x]+1;
q.push(make_pair(y,-d[y]));
}
}
}
}
/**/
/**/
void dfs(int x,int ff)
{
for(R i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(y!=ff&&dis[y]!=d[y]&&dis[y]==d[x]+1)
{
d[y]=d[x]+1;
tmp++;
dfs(y,x);
}
}
}
/**/
/**/
inline int rd()
{
int ans=0;
char ch=gc();
while(ch>'9'||ch<'0')ch=gc();
while(ch>='0'&&ch<='9')ans=ans*10+ch-48,ch=gc();
return ans;
}
/**/
int main()
{
n=rd(),m=rd(),Q=rd();
for(R i=1;i<=m;i++)
{
u[i]=rd(),v[i]=rd();
add(u[i],v[i]);
}
dijkstra();
memset(head,0,sizeof(head));
memset(vis,0,sizeof(vis));
edge_num=0;
for(R i=1;i<=Q;i++)
{
del[i]=rd();
judge[del[i]]=1;
}
for(R i=1;i<=m;i++)
{
if(!judge[i])
{
add(u[i],v[i]);
}
}
dijkstra2();
for(R i=Q;i>=1;i--)
{
tmp=0;
R num=del[i],U=u[num],V=v[num];
if(d[U]==dis[U]&&d[U]+1==dis[V]&&d[V]!=dis[V])
{
tmp++,d[V]=dis[V],dfs(V,U);
}
swap(U,V);
if(d[U]==dis[U]&&d[U]+1==dis[V]&&d[V]!=dis[V])
{
tmp++,d[V]=dis[V],dfs(V,U);
}
add(U,V);
ans[i]=tmp;
}
for(R i=1;i<=Q;i++)
{
ans[i]+=ans[i-1];
cout<<ans[i]<<endl;
}
return 0;
}
```
by zyzzyzzyzzyz @ 2018-10-25 22:15:49
fAke
by Zerosking @ 2018-10-25 22:16:46
%%%大佬
by Zerosking @ 2018-10-25 22:17:07
@[Itst](/space/show?uid=96296) @[宇智波—鼬](/space/show?uid=93043) @风骨傲天 @[薄荷凉了夏](/space/show?uid=93733) @[Leo______](/space/show?uid=91933) @[EMT__Mashiro](/space/show?uid=89875)
by zyzzyzzyzzyz @ 2018-10-25 22:18:35
@[风骨傲天](/space/show?uid=138133)
by zyzzyzzyzzyz @ 2018-10-25 22:18:51
fAKe
by _FILARET_ @ 2018-10-25 22:19:49
emmmm,小风骨跟你JIO哦,小风骨不会呢QAQ@[zyzzyzzyzzyz](/space/show?uid=44182)
by Abnormal_Sir @ 2018-10-25 22:20:19
智障:同上QwQ
by 文武武智障 @ 2018-10-25 22:20:58
ans开小了
by 谁是鸽王 @ 2018-10-25 22:37:23
~~这个题不适合新人做,还是去做P1001,P1000,P1008去吧~~
by 反比例函数 @ 2018-10-25 22:37:37