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 **************************************/
相关文章推荐
- SDUT 2170 The Largest SCC(强连通+边的变换)
- SDUT 2170 The Largest SCC
- SDUT-2170-The Largest SCC(强连通分量)
- SDUT 2170 The Largest SCC bfs+tarjan
- sdut 2170 The Largest SCC
- sdut2161 Simple Game(山东第二届省赛)
- sdut 2603 向量的旋转变换与旋转角的关系(山东第4届省赛)
- sdut2165 Crack Mathmen (山东省第二届ACM省赛)
- Sdut 2165 Crack Mathmen(数论)(山东省ACM第二届省赛E 题)
- UVA11324-- The Largest Clique(SCC+DP)
- UVAlive11324 The Largest Clique(scc+dp)
- Sdut 2165 Crack Mathmen(数论)(山东省ACM第二届省赛E 题)
- The Largest SCC(强连通分量)
- UVA 11324 - The Largest Clique(SCC缩点 + DP)
- 山东第二届省赛回顾 Binomial Coeffcients
- UVA 11324 The Largest Clique(SCC+dp)
- Sdut 2165 Crack Mathmen(数论)(山东省ACM第二届省赛E 题)
- Sdut 2164 Binomial Coeffcients (组合数学) (山东省ACM第二届省赛 D 题)
- sdut2408 Pick apples(山东第三届省赛)
- sdut 2603 Rescue The Princess(算是解析几何吧)(山东省第四届ACM省赛A题)