您的位置:首页 > 其它

sdut 2170 The Largest SCC(山东第二届省赛)

2014-04-25 18:14 316 查看
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 1005
#define M 20005
using namespace std;
struct node{
int to,next;
}edge[M];
int head
,tot;
int dfn
,low
,stap
,belong
;
bool instack
;
int indexx,bcnt,top;
int from[M],to[M];
int size
,maxsize;
void init(){
tot=0;
memset(head,-1,sizeof(head));
memset(dfn,0,sizeof(dfn));
memset(instack,false,sizeof(instack));
memset(size,0,sizeof(size));
maxsize=0;
indexx=top=bcnt=0;
}
void insert(int u,int v){
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
}
void tarjan(int u,bool bbelong){
dfn[u]=low[u]=++indexx;
instack[u]=true;
stap[++top]=u;
for(int i=head[u];i!=-1;i=edge[i].next){
int v=edge[i].to;
if(!dfn[v]){
tarjan(v,bbelong);
low[u]=min(low[u],low[v]);
}
else if(instack[v]&&dfn[v]<low[u])
low[u]=dfn[v];
}
if(low[u]==dfn[u]){
int x;
bcnt++;
do{
x=stap[top--];
instack[x]=false;
if(!bbelong)
belong[x]=bcnt;
++size[bcnt];
}while(x!=u);
if(size[bcnt]>maxsize)
maxsize=size[bcnt];
//cout<<"AAA "<<maxsize<<endl;
}
}
int main(){
int t,n,m,q;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&q);
init();
for(int i=1;i<=m;i++){
scanf("%d%d",&from[i],&to[i]);
insert(from[i],to[i]);
}
for(int i=1;i<=n;i++){
if(!dfn[i])
tarjan(i,false);
}
int final=maxsize;
int nedge;
for(int i=1;i<=q;i++){
maxsize=0;
memset(dfn,0,sizeof(dfn));
memset(instack,false,sizeof(instack));
memset(size,0,sizeof(size));
indexx=top=bcnt=0;
scanf("%d",&nedge);
if(belong[from[nedge]]==belong[to[nedge]]){
//cout<<"No Tarjan ";
printf("%d\n",final);
continue;
}
int ehead=head[to[nedge]];
insert(to[nedge],from[nedge]);   //把有向边变成双向的
tarjan(to[nedge],true);
if(maxsize>final)
printf("%d\n",maxsize);
else
printf("%d\n",final);
tot--;   //把增加的边删去
head[to[nedge]]=ehead;   //把增加的边删去
}
}
return 0;
}

/**************************************
Problem id	: SDUT OJ 2170
Result		: Accepted
Take Memory	: 864K
Take Time	: 30MS
Submit Time	: 2014-04-25 00:19:58
**************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: