nyoj-吝嗇的國度-20
一道經典的無根樹轉有根樹模板題。
模板:
#include #include using namespace std;
const int maxn = 1000;
int n, p[maxn];
vectorg[maxn];
//第一種dfs寫法:
//不需要對對p進行memset;
void dfs(int u, int fa)
}//第二種dfs寫法:用pre代替p;
//之前要對pre[maxn] 進行 memset(pre,0,sizeof(pre));
void dfs(int s)
}int main()
int root;
cin >> root; //指定根節點。
p[root] = -1; //設定根節點的父親節點為-1,代表根節點沒有父親節點。
dfs(root, -1);
for(int i = 0; i < n; ++i)
return 0;
}
ac** 1 :
#include#include#include#include#includeusing namespace std;
const int maxn=100005;
int t;
int n,s;
int p[maxn];
vectorg[maxn];
void dfs(int u,int fa)
}int main()
p[s] = -1;
dfs(s,-1);
for(int i=1;i<=n;i++)
printf("%d%c",p[i],i==n? '\n' : ' ');
}return 0;
}
ac** 2 :
#include#include#define n 100000+10
using namespace std;
vectorg[n];
int p[n];//儲存結果
int s,t,n;
void read_tree()
}void dfs(int u,int fa) }}
int main()
} return 0;
}
nyoj 吝嗇的國度(dfs無根樹轉有根樹)
題意是 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 思路很簡單,無根樹轉有根樹,然後對於每個節點列印雙親節點即可 ps 一開始對vec...
無根樹轉有根樹
乙個n n 1000000 個結點的無根樹的各條邊,並指定乙個根結點,要求把樹轉化為有根樹。輸入 結點的數目n,無根樹的各條邊,輸入乙個根結點號。輸出 各個結點的父親編號。執行結果 演算法實現 為方便起見,我們用了stl中的vector來儲存邊,g u 表示u結點的相鄰結點的編號。樹的儲存結構定義 ...
無根樹轉有根樹
輸入乙個n個節點的無根樹的各條邊,並指定乙個根節點,要求把該樹轉化為有根樹,輸出各個節點的父節點編號。樹是一種特殊的圖,因此可以使用鄰接矩陣來表示。如果使用二維陣列來儲存鄰接矩陣,則需要o n2 個元素的空間,因此改用vector陣列。從根節點開始對樹進行dfs。遍歷到每個節點時,使用陣列p來儲存該...