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 |
代码党,求优化,没用STL 500MS++#include<iostream> using namespace std; #define N 1001 #define C(a) memset(a,0,len) struct node { int v,next; }a1[N],a2[N*500]; int n,m,v0; int root[N],cnt[N],used[N],d[N]; int g1[N],g2[N],l1,l2,len; void add1(int a,int b) { a1[++l1].v=b; a1[l1].next=g1[a]; g1[a]=l1; } void add2(int a,int b) { a2[++l2].v=b; a2[l2].next=g2[a]; g2[a]=l2; } int find(int a) { int b=a; while(b!=root[b])b=root[b]; return root[a]=b; } void dfs(int s) { int i; root[s]=s; for(i=g1[s];i;i=a1[i].next){ int v=a1[i].v; dfs(v); root[v]=s; } used[s]=1; for(i=g2[s];i;i=a2[i].next){ int v=a2[i].v; if(used[v])cnt[find(v)]++; } } int main() { while(scanf("%d",&n)!=EOF){ int u,v,i,k; len=sizeof(int)*(n+1); C(d);C(cnt);C(used);C(g1);C(g2); l1=l2=0; for(k=1;k<=n;k++){ scanf("%d:(%d)",&u,&i); while(i--){ scanf("%d",&v); d[v]++; add1(u,v); } } for(v0=1;d[v0];v0++); scanf("%d",&m); while(m--) { while(getchar()!='('); scanf("%d%d",&u,&v); if(u==v)cnt[u]++; else{ add2(u,v); add2(v,u); } } while(getchar()!=')'); dfs(v0); for(i=1;i<=n;i++) if(cnt[i])printf("%d:%d\n",i,cnt[i]); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator