HihoCoder1192 簡單的樹嵌入 dfs、構造

來源:互聯網
上載者:User

標籤:hoc   16px   bool   i++   line   繼承   main   oid   mes   

題目傳送門:http://hihocoder.com/problemset/problem/1192

大意:給出一棵$N$個點的樹,邊權為$1$,要求給每個點構造$M$個權值$v_1...v_M$,使得對於任意$i,j$,都有$dis(i,j)=\sum\limits_{i=1}^M |v_i-v_j|$。$N \leq 100$,要求構造出的答案滿足$M \leq 100,-100 \leq v \leq 100$

 

$N \leq M$是這道題最好的構造性質

構造如下:每一次繼承父親的權值,並且將它自己的編號對應的權值變為$1$即可。易知這種構造方案符合條件

 1 #include<bits/stdc++.h> 2 using namespace std; 3  4 struct Edge{ 5     int end , upEd; 6 }Ed[201]; 7 int head[101] , N , cntEd , m[101][101]; 8 bool vis[101]; 9 10 inline void addEd(int a , int b){11     Ed[++cntEd].end = b;12     Ed[cntEd].upEd = head[a];13     head[a] = cntEd;14 }15 16 void dfs(int now){17     vis[now] = 1;18     for(int i = head[now] ; i ; i = Ed[i].upEd)19         if(!vis[Ed[i].end]){20             for(int j = 0 ; j < N ; j++)21                 m[Ed[i].end][j] = m[now][j] + (j == Ed[i].end);22             dfs(Ed[i].end);23         }24 }25 26 int main(){27     ios::sync_with_stdio(0);28     cin.tie(0);29     cout.tie(0);30     cin >> N;31     for(int i = 1 ; i < N ; i++){32         int a , b;33         cin >> a >> b;34         addEd(a , b);35         addEd(b , a);36     }37     dfs(0);38     cout << N << endl;39     for(int i = 0 ; i < N ; i++){40         for(int j = 0 ; j < N ; j++)41             cout << m[i][j] << ‘ ‘;42         cout << endl;43     }44     return 0;45 }

 

HihoCoder1192 簡單的樹嵌入 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.