codeforces717E Paint it really, really dark gray(樹上dfs)

來源:互聯網
上載者:User

標籤:define   size   --   open   blog   操作   節點   inline   return   

題意:

給你一棵樹,2e5個節點,每個節點有一種顏色(黑色或粉色)

讓你從節點1開始,自由沿邊行走,到達節點時會把這個節點的顏色改變

要求你輸出任意一條路徑使得從節點1出發,所有節點的顏色都變為黑色

思路:

很明顯要遞迴遍曆

每到達一個節點就先改變節點的顏色標誌並輸出當前節點

如果當前到達了葉子節點,則不用進行操作

返回上層節點時再改變節點的顏色標誌並輸出當前節點,然後判斷葉子節點的顏色,如果為粉色,則再到達一次葉子節點再回到當前節點

這樣確保當前節點的所有兒子節點都為黑色的

然後就這樣一直遞迴到根節點1,判斷根節點的顏色

如果為黑色(其實這代表著根節點為粉色,因為剛進入dfs的時候根節點的顏色被改變了一次,但是那次是不算改變的,所以顏色正好相反了)

則去他的兒子節點(兒子粉)再回來(根黑)再去那個兒子節點(兒子黑)這樣就使得所有的節點都是黑色的了

如果為粉色的話就直接不用操作了,已經完成了要求

/* ***********************************************Author        :devil************************************************ */#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <stack>#include <map>#include <string>#include <cmath>#include <stdlib.h>#define LL long long#define rep(i,a,b) for(int i=a;i<=b;i++)#define dep(i,a,b) for(int i=a;i>=b;i--)#define ou(a) printf("%d\n",a)#define pb push_back#define mkp make_pairtemplate<class T>inline void rd(T &x){    char c=getchar();    x=0;    while(!isdigit(c))c=getchar();    while(isdigit(c))    {        x=x*10+c-‘0‘;        c=getchar();    }}#define IN freopen("in.txt","r",stdin);#define OUT freopen("out.txt","w",stdout);using namespace std;const int inf=0x3f3f3f3f;const int mod=1e9+7;const int N=2e5+10;vector<int>eg[N];bool a[N];void fun(int u){    a[u]^=1;    printf("%d ",u);}void dfs(int u,int fa){    fun(u);    for(int i=0;i<eg[u].size();i++)    {        int v=eg[u][i];        if(v==fa) continue;        dfs(v,u);        fun(u);        if(a[v]) fun(v),fun(u);    }    if(u==1&&!a[u]) fun(eg[u][0]),fun(u),fun(eg[u][0]);}int main(){#ifndef ONLINE_JUDGE    IN#endif    int n,x,y;    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%d",&x);        a[i]=x==-1?1:0;    }    for(int i=1;i<n;i++)    {        scanf("%d%d",&x,&y);        eg[x].pb(y);        eg[y].pb(x);    }    dfs(1,0);    return 0;}

 

codeforces717E Paint it really, really dark gray(樹上dfs)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.