聯合權值 NOIP2014 提高組 Day1 T2

2021-07-24 16:49:02 字數 2297 閱讀 5942

codevs 3728 聯合權值

題目描述

無向連通圖g 有n 個點,n - 1 條邊。點從1 到n 依次編號,編號為 i 的點的權值為w i ,每條邊的長度均為1 。圖上兩點( u , v ) 的距離定義為u 點到v 點的最短距離。對於圖g 上的點對( u, v) ,若它們的距離為2 ,則它們之間會產生wu

×wv 的聯合權值。

請問圖g 上所有可產生聯合權值的有序點對中,聯合權值最大的是多少?所有聯合權值之和是多少?

輸入輸出格式

輸入格式:

輸入檔名為link .in。

第一行包含1 個整數n 。

接下來n - 1 行,每行包含 2 個用空格隔開的正整數u 、v ,表示編號為 u 和編號為v 的點之間有邊相連。

最後1 行,包含 n 個正整數,每兩個正整數之間用乙個空格隔開,其中第 i 個整數表示圖g 上編號為i 的點的權值為w i 。

輸出格式:

輸出檔名為link .out 。

輸出共1 行,包含2 個整數,之間用乙個空格隔開,依次為圖g 上聯合權值的最大值

和所有聯合權值之和。由於所有聯合權值之和可能很大,[b]輸出它時要對10007 取餘。

輸入輸出樣例

輸入樣例 1:

5 1 2

2 3

3 4

4 5

1 5 2 3 10

輸出樣例 1:

思路:首先60應該是很好拿的,去找每個點相距為2的點算就是了。

100分的話我們可以考慮兩個距離為2得點可以看做乙個點的兩個孩子的距離,而權值總和可以看做各個點的不同的兩個孩子的權值之積。

某個點的最大權值為其最大和次大孩子的權值之積,而權值之和和話我們可以考慮對於任意個數,兩兩相乘的乘積之和就等於這些數的和的平方減去平方的和。2*(u*v)=(u+v)^2-u^2-v^2。

60分**

#include

#include

#include

#include

using

namespace

std;

const

int maxn=400000+10;

int mod=10007;

struct cces[maxn];

int first[maxn],next[maxn];

int tot=0;

void build(int ff,int tt)

; next[tot]=first[ff];

first[ff]=tot;

}int s[maxn];

int ans=0,sum=0;

void dfs(int x,int now,int step)

for(int i=first[now];i;i=next[i])

}}int main()

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

printf("%d %d",ans,sum);

return

0;}

100分題解:

#include

#include

#include

#include

using namespace std;

const int maxn=400000+10;

const int mod=10007;

struct cces[maxn];

int first[maxn],next[maxn];

int tot=0;

void build(int ff,int tt)

; next[tot]=first[ff];

first[ff]=tot;

} int

s[maxn];

int main()

for(int i=1;i<=n;i++)

int ans1=0,ans2=0;

for(int i=1;i<=n;i++)

else

if(s[u]>max2)

}ans1=max(ans1,max1*max2);

ans2=(ans2+sum1*sum1-sum2+mod)%mod;

}printf("%d

%d",ans1,ans2);

return

0;}

NOIP2014提高組 聯合權值

傳送門 無向連通圖 g 有 n 個點,n 1 條邊。點從 1 到 n 依次編號,編號為 i 的點的權值為 wi,每條邊的長度均為 1。圖上兩點 u,v 的距離定義為 u 點到 v 點的最短距離。對於圖 g 上的點對 u,v 若它們的距離為 2,則它們之間會產生wu wv的聯合權值。請問圖 g 上所有...

NOIP2014 聯合權值

鄰接表儲存樹。列舉每個節點,使之作為中點,先計算出與其相連的所有節點的權值總和l,與其相連的所有節點在該節點處形成的權值 l w w。如果沒有l,直接列舉以此節點為中點的節點對則只能過60 的資料。include include include include include include inc...

NOIP 2014 聯合權值

評測傳送 70分 列舉中間點,然後再兩層迴圈列舉這個點的所有鄰接點,兩兩相乘,加入和中。可能退化為n 2 100分 在70分的基礎上加乙個優化,當我們列舉了中間點,然後再列舉它的鄰接點 j 時,用sum i 表示 i 的所有鄰接點的權值的和,那麼以 i 作為中間點,j這個點對答案的貢獻為 sum i...