国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Codeforces 765E - Tree Folding 【樹,dfs/bfs】

2019-11-08 01:55:08
字體:
供稿:網(wǎng)友

題目:http://codeforces.com/contest/765/PRoblem/E

題意:

給你一棵樹,可以在這棵樹上進行若干次操作,每次操作可以把兩條長度相同的鏈,根據(jù)一個中點合并在一起。 然后問你經(jīng)過若干次合并之后,最后的最短鏈長度是多少。 如果不能合并成一條鏈,輸出-1.

分析:

拓撲排序,每次我們從度數(shù)為1的點出發(fā)bfs。 然后往上合并,如果遇到交叉點,我們就合并鏈。 我們用一個set來合并就好了,如果兩條鏈長度一樣,在set里面自動就合并了。 顯然能夠bfs的點的set里面只有一個數(shù)。 而且只能有一個點的set里面有兩個數(shù)。 最后掃一遍check一下就好了。 bfs:http://www.cnblogs.com/qscqesze/p/6401615.html dfs:http://www.cnblogs.com/RUSH-D-CAT/p/6404742.html

代碼:

#include<bits/stdc++.h>using namespace std;const int maxn = 2e5+7;vector<int> g[maxn];int n,vis[maxn],d[maxn];set<int> S[maxn];int main(){ scanf("%d",&n); for(int i=1; i<n; i++) { int a,b; scanf("%d%d",&a,&b); g[a].push_back(b); g[b].push_back(a); d[a]++; d[b]++; } queue<int> Q; for(int i=1; i<=n; i++) { if(g[i].size()==1) { Q.push(i); S[i].insert(0); } } while(!Q.empty()) { int now = Q.front(); vis[now]=1; Q.pop(); for(int i=0; i<g[now].size(); i++) { int v = g[now][i]; if(vis[v])continue; S[v].insert((*S[now].begin())+1); d[v]--; if(d[v]==1&&S[v].size()==1) { Q.push(v); } } } int ans = 0,num2 = 0; for(int i=1; i<=n; i++) { if(S[i].size()==0) { cout<<"-1"<<endl; return 0; } if(S[i].size()>2) { cout<<"-1"<<endl; return 0; } if(S[i].size()==1) { ans=max(ans,*S[i].begin()); } if(S[i].size()==2) { ans=max(ans,*S[i].begin()+*S[i].rbegin()); num2++; } } if(num2>1) { cout<<"-1"<<endl; return 0; } while(ans%2==0) { ans/=2; } cout<<ans<<endl;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宝应县| 扶风县| 新竹市| 宜兰市| 白朗县| 连平县| 勃利县| 石首市| 东港市| 巴彦淖尔市| 胶南市| 安化县| 新乡市| 荥阳市| 天台县| 朝阳县| 山西省| 遂平县| 兰西县| 女性| 新邵县| 连城县| 河北省| 禹城市| 岢岚县| 二手房| 铜陵市| 河南省| 祁阳县| 雷州市| 伊金霍洛旗| 榆树市| 澎湖县| 卓资县| 阿尔山市| 无锡市| 来宾市| 龙井市| 恭城| 河东区| 银川市|