聯賽模擬測試24 聯合權值 改

2022-02-01 18:28:15 字數 2118 閱讀 2638

考完之後聽說往年有一年聯賽考過一道類似的題,於是一下子又以為要涼涼了,(自信一點,把以為去掉)

我們不妨先來考慮如何統計總和,我們考慮列舉每乙個點作為中間點的時候對於答案的貢獻,暴力列舉會\(t\)到飛起,我們可以記錄以該點的所有出邊鏈結的點的權值總和,之後再對總和平方,就可以得到乙個部分重複的答案,重在了乙個點會和自己做乘法,同時三元環的情況沒有去除,前者我們在統計總和的統計記錄一下平方和再減去就可以了,於是重點落在了三元環的問題上,這也是這道題的核心所在:如何求出所有的三元環.

我們考慮一種新的建圖方式,對於每條雙向邊改為單向,由度數小的指向度數大的.如果度數一樣就按編號大小排序,通過在紙上畫一下我們就可以發現如果我們通過一層迴圈列舉起點,二維迴圈列舉出邊,再列舉第三個點來計算每個三元環的時候每個環就一定且只會被列舉一次,於是我們減去貢獻的時候需要除去這個環的六種情況,現在我們需要證明的是這樣做不會像暴力一樣\(t\)到飛起;

對於我們列舉的每乙個起點我們分情況考慮,如果這個點的入度大於\(\sqrt m\), 那麼這些點的總數不會大於\(\sqrt m\), 它們被列舉作為中點的次數最多為\(m\), 於是總時間複雜度為\(m\sqrt m\), 如果這個點的入度小於\(\sqrt m\), 這樣的點的個數可能會很多,但是它們被列舉作為中點的次數最多為\(\sqrt m\), 所以總時間複雜度也不會超過\(m\sqrt m\)於是查詢三元環總的時間複雜度就是\(m\sqrt m\)不會\(t\)

對於第二問,我們對於每個點把它的所有連線點都按權值排個序,列舉它作為中點,兩層迴圈尋找第乙個不構成三元環的兩個點,直接跳出就可以了,由於三元環不會太多,我們列舉的次數也不會太多,於是我們可以通過這道題.

#include #include #include #include #include #define reg register

typedef long long ll;

#define gc() (p1 == p2 ? (p2 = buf + fread(p1 = buf, 1, 1 << 20, stdin), p1 == p2 ? eof : *p1++) : *p1++)

#define read() ( while(c >= '0' && c <= '9') x = x * 10 + (c & 15), c = gc(); f * x; })

char buf[1 << 20], *p1, *p2;

const int n = 1e6 + 10;

struct hash edge[n];

int head[n], tot;

void add(reg int x, reg int y)

bool query(reg int x, reg int y)

return false;

}#undef mod

} hash;

std::vectorve[n], ve1[n];

ll w[n];

bool cmp(reg int x, reg int y)

ll ans1, ans2;

int main()

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

w[i] = read();

int tt = 0;

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

ans1 += sum * sum;

ans1 -= cnt;

reg bool flag = 0;

for(reg int j = 0; j < ve[i].size(); ++j)

} }for(reg int i = 1; i <= hash.tot; i += 2)

else ve1[x].push_back(y);

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

} }if(t != 2) printf("%lld\n", ans2);

else puts("0");

if(t != 1) printf("%lld\n", ans1);

else puts("0");

return 0;

}

3728 聯合權值

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

聯合權值(link)

洛谷p1351 noip2014 day1 t2 無向連通圖 g 有 n 個點,n 1 條邊。點從 1 到 n 依次編號,編號為 i 的點的權值為 w i 每條邊的長度均為 1。圖上兩點 u,v 的距離定義為 u 點到 v 點的最短距離。對於圖 g 上的點對 u,v 若它們的距離為 2,則它們之間會...

聯合權值題解

無向連通圖 gg 有 n n 個點,n 1 role presentation style position relative n 1 n 1條邊。點從 1 1 到 n role presentation style position relative n n依次編號,編號為 i i 的點的權值為 ...