Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
用Garbow无限wa,求大牛不吝赐教好像我注释里的数据都没过,但不知道错哪了 #include<cstdio> #include<vector> using namespace std; #define MN 4100 #define ME 210000 struct { int pre; int to; }edges[ME]; int box[MN]; int len; void iniPreLinkList(int n) { memset(box,-1,sizeof(box)); len=0; } void addDirectedEdge(int frm,int to) { edges[len].to=to; edges[len].pre=box[frm]; box[frm]=len++; } void readData(int n) { int i,num,to; iniPreLinkList(n); for(i=1;i<=n;i++) { scanf("%d",&num); while(num--) { scanf("%d",&to); addDirectedEdge(i,n+to); } } for(i=1;i<=n;i++) { scanf("%d",&to); addDirectedEdge(n+to,i); } } int stk1[MN],stk2[MN],stklen1,stklen2,low[MN],blng[MN]; void garbowdfs(int cur,int lay,int &scc_num) { int ads,ct; stk1[++stklen1]=cur;stk2[++stklen2]=cur; low[cur]=++lay; for(ads=box[cur];~ads;ads=edges[ads].pre) { ct=edges[ads].to; if(!low[ct]) garbowdfs(ct,lay,scc_num); else if(!blng[ct]) while(low[stk2[stklen2]]>low[ct])stklen2--; } if(stk2[stklen2]==cur) { stklen2--; scc_num++; do { blng[stk1[stklen1]]=scc_num; } while (stk1[stklen1--]!=cur); } } int garbow(int n) { int scc_num=0,lay=0,i; memset(blng,0,sizeof(blng)); memset(low,0,sizeof(low)); stklen1=stklen2=0; for(i=1;i<=n<<1;i++) { if(low[i]==0) garbowdfs(i,lay,scc_num); } return scc_num; } vector<int> result[MN]; vector<int>::iterator it; void solve(int n) { int i; for(i=0;i<=n<<1;i++) result[i].clear(); for(i=n+1;i<=n+n;i++) { printf("%d ",blng[i]); } printf("\n"); for(i=n+1;i<=n+n;i++) { result[blng[i]].push_back(i-n); } for(i=1;i<=n;i++) { printf("%d",result[blng[i]].size()); for(it = result[blng[i]].begin();it!=result[blng[i]].end();it++) { printf(" %d",*it); } printf("\n"); } } int main() { int n; while(~scanf("%d",&n)) { readData(n); garbow(n); solve(n); } return 0; } /* 5 3 3 4 5 2 4 5 1 3 3 1 2 3 3 1 4 5 5 4 3 2 1 */ Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator