2017-09-13
巴蜀國的社會等級森嚴,除了國王之外,每個人均有且只有乙個直接上級,當然國王沒有上級。如果a是b的上級,b是c的上級,那麼a就是c的上級。絕對不會出現這樣的關係:a是b的上級,b也是a的上級。
最開始的時刻是0,你要做的就是用1單位的時間把乙個訊息告訴某乙個人,讓他們自行散布訊息。在任意乙個時間單位中,任何乙個已經接到訊息的人,都可以把訊息告訴他的乙個直接上級或者直接下屬。
現在,你想知道:
1.到底需要多長時間,訊息才能傳遍整個巴蜀國的所有人?
2.要使訊息在傳遞過程中消耗的時間最短,可供選擇的人有那些?
輸入格式:
輸入檔案的第一行為乙個整數n(n≤1000),表示巴蜀國人的總數,假如人按照1到n編上了號碼,國王的編號是1。第2行到第n行(共n-1行),每一行乙個整數,第i行的整數表示編號為i的人直接上級的編號。
輸出格式:
檔案輸出共計兩行:
第一行為乙個整數,表示最後乙個人接到訊息的最早時間。
第二行有若干個數,表示可供選擇人的編號,按照編號從小到大的順序輸出,中間用空格分開。
輸入樣例#1:
811輸出樣例#1:3444
3
53 4 5 6 7
原本一看這個題,暴力找重心,然後跑樹,然後經過仔細讀題,發現並沒有用到重心,我們只要找到乙個點到樹的最長的一條帶邊權的路徑和最大的最小。f每乙個點上的邊權是從1到所連邊個數的全排列,(因為每一次只能傳乙個)所以我們貪心選取使邊權的大值對應它所連點底下邊權和較小的值.
每一層強行sort加權.ans統計最小
#include#includeview code#include
#include
#include
#include
#define ll long long
#define _ =read();
using
namespace
std;
const
int maxn=1000+100
;int
read()
while('0'
<=ch&&ch<='9')
return an*f;
}vector
b[maxn];
bool
vis[maxn];
intwi[maxn],n;
int f[maxn],ans[maxn],mi=(int
)1e9;
bool saber(int x,int
y)void dfs(int
x) }
sort(b[x].begin(),b[x].end(),saber);
for(int i=0;i)
vis[x]=0;}
intmain()
for(int i=1;i<=n;i++)
cout
for(int i=1;i<=n;i++)if(ans[i]==mi)cout
return0;
}
by:s_a_b_e_r
一開始同以為是找重心,然後各種不會做……
後來看題解發現思路很神奇……
因為一單位時間每人只能傳給乙個人,所以這個人周圍的節點是依次接到資訊的
於是可以給它周圍的節點分配乙個邊權
子樹越大的節點越要先傳遞,邊權就越小
所以列舉一遍從哪個點開始向四周傳資訊
最後統計最小值以及方案就可以了
#include#include訊息傳遞#include
#include
#include
using
namespace
std;
const
int n=1009
;int cnt,p[n],n,ans=int
(1e9),an[n],f[n];
bool
vis[n];
struct
edgee[n
<<1
];vector
q[n];
bool cmp(int x,int y)
void add(int u,intv);
p[u]=cnt;
}void dfs(int
u) sort(q[u].begin(),q[u].end(),cmp);
for(int i=1;i<=q[u].size();++i)
f[u]=max(f[u],q[u][i-1]+i);
}int
main()
for(int i=1;i<=n;++i)
cout
<1
<
for(int i=1;i<=n;++i)
if(an[i]==ans)cout
return0;
}
by:wypx
s:新機房太棒了
w:突然換機房……幸福來的好突然
luogu P2018 訊息傳遞
一道顯而易見的樹形dp 每個人都有當根節點的機會 然後先告訴需要花費時間長的,再告訴短的 轉移方程 dp u max dp u dp v i 1 include include include using namespace std define maxn 1010 define inf 99999...
P2018 訊息傳遞 dp
巴蜀國的社會等級森嚴,除了國王之外,每個人均有且只有乙個直接上級,當然國王沒有上級。如果a是b的上級,b是c的上級,那麼a就是c的上級。絕對不會出現這樣的關係 a是b的上級,b也是a的上級。最開始的時刻是0,你要做的就是用1單位的時間把乙個訊息告訴某乙個人,讓他們自行散布訊息。在任意乙個時間單位中,...
洛谷P2018 訊息傳遞
巴蜀國的社會等級森嚴,除了國王之外,每個人均有且只有乙個直接上級,當然國王沒有上級。如果a是b的上級,b是c的上級,那麼a就是c的上級。絕對不會出現這樣的關係 a是b的上級,b也是a的上級。最開始的時刻是0,你要做的就是用1單位的時間把乙個訊息告訴某乙個人,讓他們自行散布訊息。在任意乙個時間單位中,...