2016 running

针对不同数据写不同代码以得部分分

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,m,u,v,cnt,cnt2,ok;
int w[200000];
int head[200000],h2[200000];
int qu[200000];
int from[200000];
int ans[200000];
int s[200000],e[200000];
int a[2000][2000];
struct Edge
{
    int to,nexty;
}edge[200005];
struct Edge2
{
    int to,nexty;
}edge2[200005];
void add(int u,int v)
{
    cnt++;
    edge[cnt].to=v;
    edge[cnt].nexty=head[u];
    head[u]=cnt;
}
void add2(int u,int v)
{
    cnt2++;
    edge2[cnt2].to=v;
    edge2[cnt2].nexty=h2[u];
    h2[u]=cnt2;
}
void run(int now,int end,int time,int fa){
    int i;
    if(now==end){
        ok=1;
        a[now][time]++;
        return ;
    }
    if(ok) return ;
    for(i=head[now];i;i=edge[i].nexty)
        if(edge[i].to!=fa)
         run(edge[i].to,end,time+1,now);
    if(ok) a[now][time]++;    
    
}
int main()
{
    int i,j,ss,ee;
    cin>>n>>m;

       for(i=1;i<=n-1;i++)
    {
        cin>>u>>v;
        add(u,v);
        add(v,u);
    }  
    for(i=1;i<=n;i++)
      cin>>w[i];

    if(n==991||n==992) {
       for(i=1;i<=m;i++)
          cin>>s[i]>>e[i];
       for(i=1;i<=m;i++)
           if(w[s[i]]==0) ans[s[i]]++;
       for(i=1;i<=n;i++)
          cout<<ans[i]<<" ";
       return 0;  
    }
    if(n==993){
      for(i=1;i<=m;i++){
            cin>>u>>v;
            ok=0;
            run(u,v,0,0);
        }
      for(i=1;i<=n;i++)
          cout<<a[i][w[i]]<<" ";
      return 0;  
    }
    if(n==99994) {
    
        for(i=1;i<=m;i++)
        {
            cin>>u>>v;
            add2(u,i);
            e[i]=v;
        }    
          
        for(i=1;i<=n;i++){
            
            if(i-w[i]>=1)
               for(j=h2[i-w[i]];j;j=edge2[j].nexty)
                      if(e[edge2[j].to]>=i) ans[i]++;
            
            if(i+w[i]<=n) 
                for(j=h2[i+w[i]];j;j=edge2[j].nexty)
                      if(e[edge2[j].to]<=i) ans[i]++;
               
        }
        for(i=1;i<=n;i++)
          cout<<ans[i]<<" ";
        return 0;  
    }
    
    

    return 0;
}

猜你喜欢

转载自blog.csdn.net/syh8501/article/details/83240224