分析:這道題問的是樹上整體的答案,當然要從整體上去考慮.
一條邊對答案的貢獻是這條邊一端連線的點的個數*另一端連線的點的個數*邊權,可以用一次dfs來統計答案,之後每次更改操作在原答案的基礎上增減就好了.
千萬不要傻傻地去求lca......事實證明只有10分.問的是任意兩點最短距離之和,樹上兩個點的最短路徑只有一條,所以才要去考慮每條邊的貢獻的.
#include #include#include
#include
using
namespace
std;
const
int maxn = 100010
;long
long n, head[maxn], nextt[maxn * 2], tot = 1, to[maxn * 2], w[maxn * 2
], num[maxn], fa[maxn], d[maxn], m;
long
long
ans;
void add(long
long x, long
long y, long
long
z)void dfs(long
long u, long
long
fa) }
num[u]++;
}int
main()
dfs(
1, fa[1
]); printf(
"%lld\n
", ans);
scanf(
"%lld
", &m);
for (int i = 1; i <= m; i++)
return0;
}
noip模擬賽 蒜頭君救人
分析 之前的一道模擬賽題是dp dfs,這道題是dp bfs.我們設f stu i j 為當前狀態為stu,走到 i,j 的答案,考慮怎麼設計stu,每個人的狀態有3種 要麼在原地,要麼被揹著,要麼已經到了終點,那麼用乙個3進製數儲存就可以了.下面考慮怎麼轉移,直接遞推肯定是不對的,dfs也不行,只...
noip模擬賽 蒜頭君的兔子
分析 直接暴力算有30分,像斐波那契那樣推式子算有60分,如果想要得到100分就要用一種數列題的常見優化 矩陣了.當前的兔子數和十年內的兔子數有關,我們需要1個1 11的矩陣,來記錄當前為0歲 1歲 2歲.兔子的數量,同時還需要乙個快速冪矩陣進行計算.由於一年後a 1 a 0 a 2 a 1 a 1...
2018 藍橋杯省賽 A 組模擬賽 蒜頭君下棋
題意 乙個n m的棋盤上讓你放馬,馬和馬之間不能攻擊。問能放多少匹馬。題解 最開始是以為是一道搜尋題。然後一看資料範圍。瞬間懵逼。發現這道題,是個規律題。而且規律錯綜複雜。死活沒有思路。然後我們隊裡的dalao告訴我。你看一眼西洋棋的棋盤你就能明白這道題了。然後我就看了一下棋盤,發現如下規律 當 n...