| ||||||||||
| 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 | |||||||||
刚在zoj上交也AC了In Reply To:谁能帮看看,实在是找不到错误,WA的郁闷阿。。。谢谢 Posted by:xiaolonghingis at 2006-09-06 20:24:33 > #include <iostream>
> #define MAX 4096
> using namespace std;
> int graph[1000][1000],num[1000],level[1000],uset[1000];
> int E[5000],L[5000],R[5000],pp[10000];
> int sum;
> bool visit[1100];
> inline bool RMQcmp(int i, int j)
> {
> return L[i] > L[j];
> }
> int root(int v)
> {
> if(uset[v] == v)
> return v;
> uset[v] = root(uset[v]);
> return uset[v];
> }
> int Union(int a,int b)
> {
> uset[uset[b]]=uset[a];
> return 0;
> }
> void RMQCreate()
> {
> int f = MAX, t = MAX + sum - 1, i;
> for(i = 0; i < sum; ++i)
> pp[i+MAX] = i;
> for( ;f < t; f /= 2, t /= 2)
> {
> for(i = f; i < t ; i+= 2)
> {
> if( !RMQcmp(pp[i], pp[i+1]) )
> pp[i/2] = pp[i];
> else pp[i/2] = pp[i+1];
> }
> if(!(t&1)) pp[t/2] = pp[t];
> }
> }
> int RMQFind(int ss, int ee)
> {
> int k, f, t;
> ss += MAX, ee += MAX;
> k = !RMQcmp(pp[ss] ,pp[ee]) ? pp[ss] : pp[ee];
> for( f = ss, t = ee; f < t; f/=2, t/=2)
> {
> if( !(f&1) && f + 1 < t && !RMQcmp(pp[f+1], k))
> k = pp[f+1];
> if( (t&1) && t - 1 > f && !RMQcmp(pp[t-1], k))
> k = pp[t-1];
> }
> return k;
> }
> int dfs (int v,int l)
> {
> E[sum++]=v;
> level[v]=l;
> for (int i=0;i<num[v];i++)
> if (!visit[graph[v][i]])
> {
> visit[graph[v][i]]=true;
> dfs(graph[v][i],l+1);
> E[sum++]=v;
> }
> return 0;
> }
> main ()
> {
> int n,u,v,m,i,j;
> char a;
> while (scanf ("%d",&n)!=EOF)
> {
> for (i=1;i<=n;i++)
> {
> uset[i]=i;
> num[i]=0,visit[i]=false,R[i]=-1,level[i]=100000;
> }
> for (i=0;i<n;i++)
> {
> scanf("%d",&v);
> while(scanf("%c",&a)&&a!='(');
> scanf("%d",&m);
> while(scanf("%c",&a)&&a!=')');
> num[v]=m;
> for (j=0;j<m;j++)
> {
> scanf ("%d",&graph[v][j]);
> if (root(v)!=root(graph[v][j]))
> Union(v,graph[v][j]);
> }
> }
> sum=0;
> visit[uset[v]]=true;
> dfs(uset[v],0);
> for (i=0;i<sum;i++)
> {
> L[i]=level[E[i]];
> if (R[E[i]]==-1)
> R[E[i]]=i;
> }
> RMQCreate();
> for (i=1;i<=n;i++)
> num[i]=0;
> scanf ("%d",&m);
> while (m--)
> {
> while(scanf("%c",&a)&&a!='(');
> scanf("%d%d",&u,&v);
> if (R[u]<=R[v])
> num[E[RMQFind(R[u],R[v])]]++;
> else
> num[E[RMQFind(R[v],R[u])]]++;
> while(scanf("%c",&a)&&a!=')');
> }
> for (i=1;i<=n;i++)
> if (num[i])
> printf ("%d:%d\n",i,num[i]);
> }
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator