CodeForces 34D Road Map

2015-07-20 17:49:36 · 作者: · 浏览: 4

给出每个点的父节点,存下来。

再从r2开始,dfs到r1,把这条路径上的所有结点的父节点改变方向就可以了。


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
            #define inf 0x3f3f3f3f #pragma comment(linker, "/STACK:16777216") #define eps 1e-6 #define ll long long using namespace std; int f[50010],r1,r2; void dfs(int a,int last) { if(a==r1) { f[a]=last; return ; } dfs(f[a],a); f[a]=last; } int main() { int n,i; while(~scanf("%d%d%d",&n,&r1,&r2)) { for(i=1;i<=n;i++) { if(i==r1) { f[i]=r1; continue; } scanf("%d",&f[i]); } dfs(r2,r2); int flag=0; for(i=1;i<=n;i++) { if(i==r2) continue; if(flag) putchar(' '); else flag=1; printf("%d",f[i]); } puts(""); } return 0; }