時間限制: 1 s
空間限制: 128000 kb
題目等級 : ** gold
題解檢視執行結果
題目描述 description
輸入描述 input description
輸出描述 output description
樣例輸入 sample input
樣例輸出 sample output
資料範圍及提示 data size & hint
分類標籤 tags 點此展開
noip全國聯賽提高組
2023年
本來以為很水的一道mst,結果tle了3個點
70分**:
#includeusing思路引導:namespace
std;
#define n 300100
#define mod 10007vector
g[n];
intn,maxn,ans,w[n],vis[n];
void dfs(int t)
}}int
main()
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
printf(
"%d %d\n
",maxn,ans);
return0;
}
以上為日照夏令營提供的標解;(有能力者,自己寫**)--在此僅做整理。
以下為自己以前寫的**;
優化後ac**:
題解:
maxn 很顯然等於某個點的最大的兒子乘以次大的兒子(有點「貪心」的味道)
ans = w[x] * (sum[fa[x]] - w[x]),fa[x]指的是父親節點,但是這樣會重複計算,所以直接按照dfs序去跑(這裡直接迴圈就好了),計算過的就刪去就好了
//正解:列舉每個點,這個點所連線的任意兩點的距離為2,把它們都放到乙個陣列裡,取最大的兩個數相乘即為當前最優解,對於所有點取大;
//至於權值和,補充乙個數學知識:(a+b+c)^2=a*a+b*b+c*c+2ab+2ac+2bc, 2ab+2ac+2bc即為當前和,對於所有點取和。
#includeusing
namespace
std;
#define n 300100
#define mod 10007vector
g[n];
intn,maxn,ans,w[n];
intmain()
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
maxn=max(maxn,m1*m2);
ans=(ans+(s*s-p)%mod)%mod;
}printf(
"%d %d\n
",maxn,ans);
return0;
}
3728 聯合權值
無向連通圖g 有n 個點,n 1 條邊。點從1 到n 依次編號,編號為 i 的點的權值為w i 每條邊的長度均為1 圖上兩點 u v 的距離定義為u 點到v 點的最短距離。對於圖g 上的點對 u,v 若它們的距離為2 則它們之間會產生wu wv 的聯合權值。請問圖g 上所有可產生聯合權值的有序點對中...
聯合權值(codevs 3728)
無向連通圖 g 有 n 個點,n 1 條邊。點從 1 到 n 依次編號,編號為 i 的點的權值為 wi,每條邊的長度均為 1。圖上兩點 u,v 的距離定義為 u 點到 v 點的最短距離。對於圖 g 上的點對 u,v 若它們的距離為 2,則它們之間會產生wv wu 的聯合權值。請問圖 g 上所有可產生...
聯合權值(codevs 3728)題解
問題描述 無向連通圖 g 有 n 個點,n 1 條邊。點從 1 到 n 依次編號,編號為 i 的點的權值為wi 每條邊的長度均為 1。圖上兩點 u,v 的距離定義為 u 點到 v 點的最短距離。對於圖 g 上的點對 u,v 若它們的距離為 2,則它們之間會產生wu wv 的聯合權值。請問圖 g 上所...