日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客假日团队赛8:H.Cell Phone Network(最小支配集)

發(fā)布時(shí)間:2024/9/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客假日团队赛8:H.Cell Phone Network(最小支配集) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鏈接:https://ac.nowcoder.com/acm/contest/1069/A
來源:牛客網(wǎng)

時(shí)間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld
題目描述
Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to set up cell phone towers on his N (1 ≤ N ≤ 10,000) pastures (conveniently numbered 1…N) so they can all communicate.
Exactly N-1 pairs of pastures are adjacent, and for any two pastures A and B (1 ≤ A ≤ N; 1 ≤ B ≤ N; A ≠ B) there is a sequence of adjacent pastures such that A is the first pasture in the sequence and B is the last. Farmer John can only place cell phone towers in the pastures, and each tower has enough range to provide service to the pasture it is on and all pastures adjacent to the pasture with the cell tower.
Help him determine the minimum number of towers he must install to provide cell phone service to each pasture.
輸入描述:

  • Line 1: A single integer: N
  • Lines 2…N: Each line specifies a pair of adjacent pastures with two space-separated integers: A and B
    輸出描述:
  • Line 1: A single integer indicating the minimum number of towers to install
    示例1
    輸入
    復(fù)制
5 1 3 5 2 4 3 3 5

輸出
復(fù)制

2

說明
The towers can be placed at pastures 2 and 3 or pastures 3 and 5.

一.題意:

給出直接相連的幾條邊,選擇最少的點(diǎn),使所有點(diǎn)都被覆蓋(點(diǎn)能被覆蓋的條件是:與所選點(diǎn) 有邊直接相連)
這題實(shí)質(zhì)上是求最小支配集

二.最小支配集的概念:

支配集的定義如下:給定無向圖G =(V , E),其中V是點(diǎn)集, E是邊集, 稱V的一個(gè)子集S稱為支配集當(dāng)且僅當(dāng)對于V-S中任何一個(gè)點(diǎn)v, 都有S中的某個(gè)點(diǎn)u, 使得(u, v) ∈E。
特別地,最小的支配集S(即任意一個(gè)比S小的集合都不可能是支配集)叫做最小支配集

三 .求解最小支配集的方法:

1.類似Tarjan且基于dfs的貪心
2.樹形dp

四.具體操作

解法一:
貪心:
1.選擇其中一個(gè)點(diǎn)作為root,定義father數(shù)組,并標(biāo)記root的父親為自己。
2.定義一個(gè)dfsn數(shù)組,用于dfs時(shí)記錄每個(gè)點(diǎn)dfs序
3.dfs,dfs得到dfs序和每個(gè)點(diǎn)的father
4.定義一個(gè)s數(shù)組,作為支配集容器,
重新初始化vis,vis用于標(biāo)記是否屬于支配集和是否與支配集中的點(diǎn)相連
記錄答案:按照dfs序的逆序依次選點(diǎn)
對于一個(gè)即不屬于支配集也不與支配集中的點(diǎn)相連的點(diǎn)來說
,如果他的父節(jié)點(diǎn)不屬于支配集,將其父節(jié)點(diǎn)加入到支配集,ans++,標(biāo)記當(dāng)前節(jié)點(diǎn)父節(jié)點(diǎn)屬于支配集s
標(biāo)記當(dāng)前結(jié)點(diǎn)、當(dāng)前結(jié)點(diǎn)的父節(jié)點(diǎn)(屬于支配集)、當(dāng)前結(jié)點(diǎn)的父節(jié)點(diǎn)的父節(jié)點(diǎn)(與支配集中的點(diǎn)相連)。

#include <bits/stdc++.h> using namespace std; const int MAXN = 1e4+5; vector<int>vec[MAXN]; int dfn[MAXN]; bool vis[MAXN]; int father[MAXN]; int s[MAXN]; int cnt; int n; void init() {for(int i = 0; i<= n; i++){vis[i] = false;} } void dfs(int s) {dfn[++cnt] = s ;int iSize = vec[s].size();for(int i = 0; i < iSize; i++){int to = vec[s][i];if(!vis[to]){father[to] = s;vis[to] = true;dfs(to);}}return; } int solve() {father[1] = 1;vis[1] = true;dfs(1);init();int ans = 0;for(int i = cnt; i > 0; i--){int x = dfn[i];if(!vis[x])//不屬于支配集也不與支配集中的點(diǎn)相連{if(!s[father[x]])//它的父節(jié)點(diǎn)不屬于支配集{ans++;s[father[x]] = true;//父節(jié)點(diǎn)入支配集}vis[x] = true;//標(biāo)記自己vis[father[x]] = true;//標(biāo)記自己的父親vis[father[father[x]]] = true;//標(biāo)記自己父親的父親}}return ans; } int main() {cin>>n;int x,y;for(int i = 1; i < n; i++){cin>>x>>y;vec[x].push_back(y);vec[y].push_back(x);}cout<<solve()<<endl;return 0; }

解法二:
dp:(我表示并不會)
請參考下面來自百度百科的代碼:

#include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int MAXN=10010; const int INF=int(1e7); struct node { int to; int next; } edge[MAXN*2]; int head[MAXN*2],num; int dp[MAXN][3]; /* 1):dp[i][0],表示點(diǎn) i 屬于支配集合, 并且以點(diǎn) i 為根的子樹都被覆蓋了的情況下支配集中所包含最少點(diǎn)的個(gè)數(shù). 2):dp[i][1],表示點(diǎn) i 不屬于支配集合,且以 i 為根的子樹都被覆蓋, 且 i 被其中不少于一個(gè)子節(jié)點(diǎn)覆蓋的情況下支配集所包含最少點(diǎn)的個(gè)數(shù). 3):dp[i][2],表示點(diǎn) i 不屬于支配集合, 且以 i 為根的子樹都被覆蓋,且 i 沒被子節(jié)點(diǎn)覆蓋的情況下支配集中所包含最少點(diǎn)的個(gè)數(shù).即 i 將被父節(jié)點(diǎn)覆蓋. */ int n; void add(int x,int y) { edge[++num].next=head[x]; edge[num].to=y; head[x]=num; } void DP( int k,int fat ) { dp[ k ][ 0 ]=1; dp[ k ][ 2 ]=0; bool s=0; int x,sum=0,inc=INF; for(int i=head[ k ]; i ;i=edge[i].next ) { x=edge[i].to; if( x==fat ) continue ; DP( x,k ); dp[ k ][ 0 ]+=min(dp[ x ][ 0 ],min(dp[ x ][ 1 ],dp[ x ][ 2 ])); if( dp[ x ][ 0 ] <= dp[ x ][ 1 ] ) { sum+=dp[ x ][ 0 ]; s=1; } else { sum+=dp[ x ][ 1 ]; inc=min(inc,dp[ x ][ 0 ]-dp[ x ][ 1 ]); } if( dp[ x ][ 1 ]!=INF && dp[ k ][ 2 ]!=INF ) //x不是葉子節(jié)點(diǎn),而且k有父親,即k不是根 dp[ k ][ 2 ]+=dp[ x ][ 1 ]; else dp[ k ][ 2 ]=INF; } if( inc==INF && !s )//k沒有子節(jié)點(diǎn) dp[ k ][ 1 ]=INF; else { dp[ k ][ 1 ]=sum; if( !s )//如果不為零,則k的子節(jié)點(diǎn)中有一個(gè)已經(jīng)染色 dp[ k ][ 1 ]+=inc; } return ; } int main() { int u,v; scanf("%d",&n); for(int i=1; i<=n-1; i++) { scanf("%d%d",&u,&v); add(u,v); add(v,u); } DP( 1,0 ); int ans=min(dp[1][0],dp[1][1]); printf("%d\n",ans); return 0;

總結(jié)

以上是生活随笔為你收集整理的牛客假日团队赛8:H.Cell Phone Network(最小支配集)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲手机av | 一区二区三区精品视频 | av猫咪| 免费国产黄 | 亚洲国产97在线精品一区 | 久久久久亚洲av无码专区体验 | 中文字幕无码毛片免费看 | 国产稀缺真实呦乱在线 | 国产愉拍 | 国产精品伦子伦免费视频 | 91福利免费 | 成人手机av| 无码内射中文字幕岛国片 | 农村激情伦hxvideos | 黄网站免费大全入口 | 一级片视频在线观看 | 丰满少妇被猛烈进入高清播放 | 在线麻豆| 99热播精品| 激情成人综合网 | 色汉综合 | 国产人妖一区 | 搡老熟女老女人一区二区 | 99热这里只有精品在线 | 欧美久久久久久又粗又大 | 亚洲丝袜在线视频 | 国产尤物视频在线观看 | 亚洲一区二区三区在线视频 | 日本韩国欧美中文字幕 | jizz成熟丰满日本少妇 | 日本一区二区三区在线看 | 亚洲av电影一区二区 | 亚欧洲精品视频在线观看 | 亚洲色图88 | 白嫩日本少妇做爰 | 国产美女无遮挡永久免费 | 97人人模人人爽人人少妇 | 中国在线观看片免费 | 扒开女人屁股进去 | 久久伊人影院 | 一区二区啪啪啪 | av簧片| 日韩中文字幕av电影 | 亚洲国产理论 | 国内av片 | 欧美91成人网 | 国产一区二区自拍 | 一区二区在线免费视频 | 中文字幕一区二区三区手机版 | 神马午夜影院 | 美脚の诱脚舐め脚视频播放 | 18欧美性xxxx极品hd | 丰满肥臀噗嗤啊x99av | 后入内射欧美99二区视频 | 日韩第一页在线观看 | 苍井空张开腿实干12次 | 性感美女一区 | 日韩人妻无码精品综合区 | 97网站 | 黄色福利网 | 成人免费午夜视频 | 国产超级av在线 | 国产性一乱一性一伧一色 | 精品国产乱码久久久久久鸭王1 | 国产露脸91国语对白 | 娇喘顶撞深初h1v1 | 国产日产欧美 | 人妻在线日韩免费视频 | 国内精品久久久久久久久 | 国产精品免费在线播放 | 国产农村妇女精品一二区 | 26uuu国产| 91在线精品一区二区三区 | 91国内 | 中文字幕一区二区三区四区欧美 | 中国美女毛片 | 精品成人一区二区三区 | 韩国伦理在线视频 | 精品国产毛片 | 精品少妇爆乳无码av无码专区 | 亚洲日b视频 | 男人天堂手机在线 | 欧美性在线观看 | 天天天综合网 | 色婷婷av一区| 少妇毛片视频 | 俺去射 | 欧美 日韩 国产 一区 | 成人免费毛片嘿嘿连载视频 | 亚洲www啪成人一区二区麻豆 | 夜色福利| 91精品在线一区 | 亚洲一区二区三区四区不卡 | 红桃视频隐藏入口 | 天天干天天天天 | 在线国产视频一区 | 国产免费91视频 | 手机在线免费观看av | 国产日韩欧美不卡 |