Codeforces 746 G. New Roads

題目鏈接:http://codeforces.com/contest/746/problem/G


mamaya,不知道YY了一個什么做法就這樣過去了啊 2333

?

首先我顯然可以隨便構造出一棵樹滿足他所給出的深度要求。

但是他還對于葉子節點的數目有要求。

考慮首先構造一棵樹最大化在滿足給出的深度條件下最大化葉子節點的個數。

顯然對于每一層的節點讓它們的父親都指向上一層的同一個點的話就會有最多的葉子節點。

?

好,接下來考慮如何減少葉子結點。

我就是隨便貪心搞的(也許可以被叉?)

按照深度從小到大枚舉所有的點,如果這個點$x$是葉子節點,找到他的上一層是某一個也是葉子節點的點$y$,并將$x$的父親修改為$y$,同時還要注意到修改父親之后,$x$原本的父親也可能再度變回葉子節點。這些東西都用一個$vector$來維護就可以了。

?

復雜度:${O(n)}$


 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<cstdlib>
 6 #include<cmath>
 7 #include<cstring>
 8 using namespace std;
 9 #define maxn 1001000
10 #define llg int
11 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
12 llg n,m,deep[maxn],c[maxn],a[maxn],du[maxn],dad[maxn],t,k,db[maxn],tot;
13 vector<llg>d[maxn];
14 
15 inline int getint()
16 {
17        int w=0,q=0; char c=getchar();
18        while((c<'0' || c>'9') && c!='-') c=getchar(); if(c=='-') q=1,c=getchar(); 
19        while (c>='0' && c<='9') w=w*10+c-'0', c=getchar(); return q ? -w : w;
20 }
21 
22 int main()
23 {
24     yyj("G");
25     cin>>n>>t>>k;
26     for (llg i=1;i<=t;i++) a[i]=getint(),c[i]=a[i];
27     llg p=1;
28     db[0]=1;
29     for (llg i=2;i<=n;i++)
30     {
31         if (c[p]==0) p++;
32         dad[i]=db[p-1]; deep[i]=p;
33         du[db[p-1]]++;
34         if (!db[p]) db[p]=i;
35         c[p]--;
36     }
37     for (llg i=1;i<=n;i++)  if (!du[i]) {d[deep[i]].push_back(i); tot++;}
38     if (tot<k) {cout<<-1; return 0;}
39     for (llg i=1;i<=n;i++)
40         if (!du[i])
41         {
42             if (tot==k) break;
43             if (d[deep[i]-1].size()!=0)
44             {
45                 du[dad[i]]--;
46                 if (du[dad[i]]==0){ tot++; d[deep[dad[i]]].push_back(dad[i]);}
47                 du[d[deep[i]-1][d[deep[i]-1].size()-1]]++;
48                 tot--;
49                 dad[i]=d[deep[i]-1][d[deep[i]-1].size()-1];
50                 d[deep[i]-1].pop_back();
51             }
52         }
53     if (tot!=k) {cout<<-1; return 0;}
54     cout<<n<<endl;
55     for (llg i=2;i<=n;i++) printf("%d %d\n",dad[i],i);
56     return 0;
57 }

?

轉載于:https://www.cnblogs.com/Dragon-Light/p/6586742.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284225.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

模型驗證組件 FluentValidation

FluentValidation 是 .NET 下的模型驗證組件&#xff0c;和 ASP.NET MVC 基于Attribute 聲明式驗證的不同處&#xff0c;其利用表達式語法鏈式編程&#xff0c;使得驗證組件與實體分開。正如 FluentValidation 的 介紹&#xff1a; A small validation library for .NET that u…

第二屆中國PWA開發者日

點擊藍字關注我們活動介紹為加速推動漸進式 Web 應用 (PWA) 在中國的發展&#xff0c;微軟與英特爾攜手舉辦“第二屆中國 PWA 開發者日”。本次活動邀請一眾業界大咖圍繞 PWA 展開分享&#xff0c;探討最新技術進展&#xff0c;及 PWA 生態的實踐與落地。期待與您線上相聚。活動…

【GlobalMapper精品教程】018:提取影像數據的范圍生成矢量圖層

文章目錄 1. 加載影像數據2. 生成邊界3. 導出矢量范圍4. 背景影響邊界解決辦法1. 加載影像數據 以DSM為例,加載如下所示: 2. 生成邊界 在影像圖層上右鍵→圖層→【邊界框/覆蓋-創建圖層覆蓋框/多邊形區要素】,如下圖所示: 選擇【否】。 邊界創建完成。 3. 導出矢量范圍 …

MPMoviePlayerController屬性方法簡介

屬性說明property (nonatomic, copy) NSURL *contentURL播放媒體URL&#xff0c;這個URL可以是本地路徑&#xff0c;也可以是網絡路徑property (nonatomic, readonly) UIView *view播放器視圖&#xff0c;如果要顯示視頻必須將此視圖添加到控制器視圖中property (nonatomic, re…

在Leangoo里怎么設置看板周期?

設置看板周期有兩種方式&#xff1a; 1&#xff09;點擊看板上的看板周期時間直接修改 2&#xff09;通過菜單 設置看板周期 瀏覽器訪問官網鏈接&#xff1a;www.leangoo.com 轉載于:https://www.cnblogs.com/shineshine/p/5663104.html

consul部署多節點和consul-template部署

一.consul的介紹 1.1consul是什么&#xff1f; Consul是HashiCorp公司推出的開源工具,用于實現分布式系統的服務發現與配置。 Consul是分布式的、高可用的、可橫向擴展的。它具備以下特性 : service discovery:consul通過DNS或者HTTP接口使服務注冊和服務發現變的很容易,一些外…

基于ABP實現DDD

什么是DDD呢&#xff1f;領域驅動設計[DDD]是一種針對復雜需求的軟件開發方法。將軟件實現與不斷發展的模型聯系起來&#xff0c;專注于核心領域邏輯&#xff0c;而不是基礎設施細節。DDD適用于復雜領域和大規模應用&#xff0c;而不是簡單的CRUD應用。它有助于建立一個靈活、模…

二、通過工廠方法來配置bean

調用靜態工廠方法創建 Bean是將對象創建的過程封裝到靜態方法中. 當客戶端需要對象時, 只需要簡單地調用靜態方法, 而不同關心創建對象的細節. 要聲明通過靜態方法創建的 Bean, 需要在 Bean 的 class 屬性里指定擁有該工廠的方法的類, 同時在 factory-method 屬性里指定工廠方法…

【GlobalMapper精品教程】019:基于DSM提取離散隨機點的高程信息

本文講解在globalmapper中,基于DSM提取離散隨機點的高程信息,配套數據為data019.rar。 文章目錄 1. 離散點創建2. 提取離散點高程信息3. 高程標注1. 離散點創建 本文在ArcGIS中,根據給定的范圍,隨機生成離散點,如下圖: 拓展閱讀: ArcGIS根據范圍創建隨機點教程:【ArcG…

shell腳本注意點

2019獨角獸企業重金招聘Python工程師標準>>> 直接命令行寫腳本的時候&#xff0c;可以用 ; 分割&#xff0c;或 也可以直接回車&#xff0c;然后在繼續寫腳本在使用 方括號[ ] 的時候&#xff0c;里面空格兩邊都必須要有空格&#xff0c;比如 [ $a -gt 3 ] 在方括號…

C語言編程規范--------2 注釋

2.1 注釋的原則 注釋的目的是解釋代碼的目的、功能和采用的方法&#xff0c;提供代碼以外的信息&#xff0c;幫助讀者理解代碼&#xff0c;防止沒必要的重復注釋信息。 示例&#xff1a;如下注釋意義不大。 /* if receive_flag is TRUE */ if (receive_flag) 而如下的注釋則給出…

備戰金九銀十:RabbitMQ有5種工作模式(6)

RabbitMQ是實現了高級消息隊列協議&#xff08;AMQP&#xff09;的開源消息代理軟件&#xff08;亦稱面向消息的中間件&#xff09;。RabbitMQ服務器是用Erlang語言編寫的&#xff0c;而集群和故障轉移是構建在開放電信平臺框架上的。所有主要的編程語言均有與代理接口通訊的客…

【GlobalMapper精品教程】020:Lidar點云數據分類(自動分類、手動分類)案例詳解

航測點云通常跟DSM一致,即包含植被、房屋等信息,必須進行點云分類、過濾,才能生成準確的高程點、等高線和DEM等地形數據。本文以案例的形式詳細講解globalmapper23中點云工具及使用方法。 文章目錄 1. 點云分類2. 創建地面高程格網3. 地形繪制4. 格網轉點云5. 點云抽稀6. 點…

社交網絡圖中結點的“重要性“計算(Dijkstra + SPFA + Floyd + 模板)

題目鏈接&#xff1a; 無 題目大意&#xff1a; 求一個點到其他所有點的最短距離和&#xff0c;保證圖連通。 解題過程&#xff1a; 剛開始用 Floyd 水過的&#xff0c;后來用換了幾種方法&#xff0c;不錯的模板題&#xff0c;Floyd 的時候&#xff0c;要用 vector 存邊&#…

web布局固定寬度+變化寬度實現思路

前言 頁面當中常規布局我想大家都會的&#xff0c;但有些布局是常規布局中實現不了的&#xff0c;比如變寬和固寬結合的&#xff0c;需要實現(300px)&#xff0b;(100%&#xff0d;300px)的兩列布局。以下樣式代碼前提均為盒模型為border-sizing 的前提下。 html部分 <div c…

CSS3 nth 偽類選擇器

考察下面的 HTML 代碼片段&#xff1a; <div><section>section 1</section><section>section 2</section><ul><li>item 1</li><li><ul><li>sub item 1</li><li>sub item 2</li><li>…

RedisCluster的安裝、部署、擴容和 Java客戶端調用

Redis下載 官網地址&#xff1a;http://redis.io/ 中文官網地址&#xff1a;http://www.redis.cn/ 下載地址&#xff1a;http://download.redis.io/releases/ 安裝 # &#xff08;三臺&#xff09;安裝 C 語言需要的 GCC 環境 yum install -y gcc-c yum install -y wget # 下…

【CloudCompare教程】001:CloudCompare中文版下載與安裝圖文教程

CloudCompare是一款功能強大的點云后處理軟件,本文講解CloudCompare中文版下載與安裝方法。 文章目錄 一、CloudCompare下載地址二、CloudCompare安裝教程三、CloudCompare中文設置一、CloudCompare下載地址 官方下載地址:http://www.danielgm.net/cc/release/ 二、CloudComp…

ML.NET相關資源整理

在人工智能領域&#xff0c;無論是機器學習&#xff0c;還是深度學習等&#xff0c;Python編程語言都是絕對的主流&#xff0c;盡管底層都是C實現的&#xff0c;似乎人工智能和C#/F#編程語言沒什么關系。在人工智能的工程實現&#xff0c;通常都是將Python訓練好的人工智能模型…