#include <algorithm>
#include <iostream>
#include <numeric>
#include <cassert>
#include <vector>
#define int long long
typedef long long llong;
const int MAXN = 500 + 10;
const int MAXM = 100000 + 10;
const int MAXQ = 1000000 + 10;
int n, m, q;
struct Edge
{
int u, v, cost;
friend bool operator < (const Edge &a, const Edge &b)
{
return a.cost < b.cost;
}
};
Edge e[MAXM];
llong answer[MAXQ];
std::vector <std::pair <int,int>> g[MAXN];
std::pair <int,int> queries[MAXQ];
int leftMAX[MAXM];
int rightMIN[MAXM];
int startT[MAXM];
int endT[MAXM];
int edge[MAXM];
int par[MAXM];
void addEdge(int u, int v, int idx)
{
g[u].push_back({v, idx});
g[v].push_back({u, idx});
}
void removeEdge(int u, int v)
{
for (auto &x : g[u])
{
if (x.first == v)
{
std::swap(x, g[u].back());
g[u].pop_back();
break;
}
}
for (auto &x : g[v])
{
if (x.first == u)
{
std::swap(x, g[v].back());
g[v].pop_back();
break;
}
}
}
void rebuildDFS(int node)
{
for (const auto &[u, idx] : g[node])
{
if (u == par[node])
{
continue;
}
par[u] = node;
edge[u] = idx;
rebuildDFS(u);
}
}
bool vis[MAXN];
int findLCA(int u, int v)
{
std::fill(vis + 1, vis + 1 + n, false);
int node = v;
while (node != 0)
{
vis[node] = true;
node = par[node];
}
node = u;
while (!vis[node])
{
node = par[node];
}
return node;
}
int findChainMAX(int u, int v)
{
if (u == v) return 0;
int res = findChainMAX(par[u], v);
if (res == 0 || edge[u] > edge[res]) return u;
else return res;
}
int findChainMIN(int u, int v)
{
if (u == v) return 0;
int res = findChainMIN(par[u], v);
if (res == 0 || edge[u] < edge[res]) return u;
else return res;
}
int findMAX(int u, int v)
{
int lca = findLCA(u, v);
int resU = findChainMAX(u, lca);
int resV = findChainMAX(v, lca);
if (resU == 0 || (resV != 0 && edge[resV] > edge[resU])) return resV;
else return resU;
}
int findMIN(int u, int v)
{
int lca = findLCA(u, v);
int resU = findChainMIN(u, lca);
int resV = findChainMIN(v, lca);
if (resU == 0 || (resV != 0 && edge[resV] < edge[resU])) return resV;
else return resU;
}
void solve()
{
std::sort(e + 1, e + 1 + m);
for (int i = 1 ; i <= n ; ++i)
{
g[i].clear();
}
for (int i = 1 ; i < n ; ++i)
{
g[i].push_back({i + 1, 0});
g[i + 1].push_back({i, 0});
}
par[1] = 0;
edge[1] = m + 1;
rebuildDFS(1);
for (int i = 1 ; i <= m ; ++i)
{
int res = findMIN(e[i].u, e[i].v);
assert(res > 1 && res <= n);
leftMAX[i] = edge[res];
removeEdge(res, par[res]);
addEdge(e[i].u, e[i].v, i);
par[1] = 0;
edge[1] = m + 1;
rebuildDFS(1);
}
for (int i = 1 ; i <= n ; ++i)
{
g[i].clear();
}
for (int i = 1 ; i < n ; ++i)
{
g[i].push_back({i + 1, m + 1});
g[i + 1].push_back({i, m + 1});
}
par[1] = 0;
edge[1] = 0;
rebuildDFS(1);
for (int i = m ; i >= 1 ; --i)
{
int res = findMAX(e[i].u, e[i].v);
assert(res > 1 && res <= n);
rightMIN[i] = edge[res];
removeEdge(res, par[res]);
addEdge(e[i].u, e[i].v, i);
par[1] = 0;
edge[1] = 0;
rebuildDFS(1);
}
// for (int i = 1 ; i <= m ; ++i)
// {
// rightMIN[i] = m + 1;
// }
for (int i = 1 ; i <= m ; ++i)
{
if (leftMAX[i] != 0) assert(rightMIN[leftMAX[i]] != m + 1);
// rightMIN[leftMAX[i]] = i;
}
for (int i = 1 ; i <= m ; ++i)
{
if (leftMAX[i] == 0)
{
startT[i] = 1;
} else
{
startT[i] = (e[i].cost + e[leftMAX[i]].cost + 2) / 2;
}
if (rightMIN[i] == m + 1)
{
endT[i] = 1e9;
} else
{
endT[i] = (e[rightMIN[i]].cost + e[i].cost) / 2;
}
}
for (int i = 1 ; i <= q ; ++i)
{
llong res = 0;
int cntIn = 0;
for (int j = 1 ; j <= m ; ++j)
{
if (startT[j] <= queries[i].first && queries[i].first <= endT[j])
{
cntIn++;
res += abs(queries[i].first - e[j].cost);
}
}
// assert(cntIn == n - 1);
answer[i] = res;
}
}
void print()
{
for (int i = 1 ; i <= q ; ++i)
{
std::cout << answer[i] << '\n';
}
}
void input()
{
std::cin >> n >> m;
for (int i = 1 ; i <= m ; ++i)
{
std::cin >> e[i].u >> e[i].v >> e[i].cost;
}
std::cin >> q;
for (int i = 1 ; i <= q ; ++i)
{
std::cin >> queries[i].first;
queries[i].second = i;
}
}
void fastIOI()
{
std::ios_base :: sync_with_stdio(0);
std::cout.tie(nullptr);
std::cin.tie(nullptr);
}
signed main()
{
fastIOI();
input();
solve();
print();
return 0;
}
/*
5 10
1 2 8
1 3 13
1 4 5
1 5 11
1 5 3
2 3 7
2 4 15
3 4 6
3 5 6
4 5 2
1
3
6
8
10
13
17
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10584 KB |
Output is correct |
2 |
Correct |
2 ms |
10588 KB |
Output is correct |
3 |
Correct |
2 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
2 ms |
10588 KB |
Output is correct |
6 |
Correct |
2 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
2 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10712 KB |
Output is correct |
11 |
Correct |
2 ms |
10588 KB |
Output is correct |
12 |
Correct |
2 ms |
10588 KB |
Output is correct |
13 |
Correct |
2 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
1 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10584 KB |
Output is correct |
2 |
Correct |
2 ms |
10588 KB |
Output is correct |
3 |
Correct |
2 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
2 ms |
10588 KB |
Output is correct |
6 |
Correct |
2 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
2 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10712 KB |
Output is correct |
11 |
Correct |
2 ms |
10588 KB |
Output is correct |
12 |
Correct |
2 ms |
10588 KB |
Output is correct |
13 |
Correct |
2 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
1 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
19 |
Correct |
1 ms |
10588 KB |
Output is correct |
20 |
Correct |
841 ms |
12456 KB |
Output is correct |
21 |
Correct |
788 ms |
14384 KB |
Output is correct |
22 |
Correct |
778 ms |
14160 KB |
Output is correct |
23 |
Correct |
796 ms |
14160 KB |
Output is correct |
24 |
Correct |
800 ms |
14164 KB |
Output is correct |
25 |
Correct |
848 ms |
14168 KB |
Output is correct |
26 |
Correct |
808 ms |
14164 KB |
Output is correct |
27 |
Correct |
800 ms |
14164 KB |
Output is correct |
28 |
Correct |
795 ms |
14160 KB |
Output is correct |
29 |
Correct |
839 ms |
14420 KB |
Output is correct |
30 |
Correct |
819 ms |
14164 KB |
Output is correct |
31 |
Correct |
805 ms |
14164 KB |
Output is correct |
32 |
Correct |
800 ms |
14160 KB |
Output is correct |
33 |
Correct |
804 ms |
14160 KB |
Output is correct |
34 |
Correct |
814 ms |
14272 KB |
Output is correct |
35 |
Correct |
803 ms |
14160 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10588 KB |
Output is correct |
2 |
Correct |
1 ms |
10588 KB |
Output is correct |
3 |
Correct |
1 ms |
10588 KB |
Output is correct |
4 |
Execution timed out |
5086 ms |
26740 KB |
Time limit exceeded |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10584 KB |
Output is correct |
2 |
Correct |
2 ms |
10588 KB |
Output is correct |
3 |
Correct |
2 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
2 ms |
10588 KB |
Output is correct |
6 |
Correct |
2 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
2 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10712 KB |
Output is correct |
11 |
Correct |
2 ms |
10588 KB |
Output is correct |
12 |
Correct |
2 ms |
10588 KB |
Output is correct |
13 |
Correct |
2 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
1 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
19 |
Correct |
2 ms |
10584 KB |
Output is correct |
20 |
Correct |
1224 ms |
41280 KB |
Output is correct |
21 |
Correct |
1193 ms |
51276 KB |
Output is correct |
22 |
Correct |
1235 ms |
51228 KB |
Output is correct |
23 |
Correct |
1220 ms |
51228 KB |
Output is correct |
24 |
Correct |
1232 ms |
51268 KB |
Output is correct |
25 |
Correct |
1188 ms |
50964 KB |
Output is correct |
26 |
Correct |
1182 ms |
50968 KB |
Output is correct |
27 |
Correct |
1228 ms |
51224 KB |
Output is correct |
28 |
Correct |
1218 ms |
50976 KB |
Output is correct |
29 |
Correct |
1221 ms |
50960 KB |
Output is correct |
30 |
Correct |
1224 ms |
51332 KB |
Output is correct |
31 |
Correct |
1201 ms |
51024 KB |
Output is correct |
32 |
Correct |
1155 ms |
51748 KB |
Output is correct |
33 |
Correct |
1188 ms |
51076 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10584 KB |
Output is correct |
2 |
Correct |
2 ms |
10588 KB |
Output is correct |
3 |
Correct |
2 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
2 ms |
10588 KB |
Output is correct |
6 |
Correct |
2 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
2 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10712 KB |
Output is correct |
11 |
Correct |
2 ms |
10588 KB |
Output is correct |
12 |
Correct |
2 ms |
10588 KB |
Output is correct |
13 |
Correct |
2 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
1 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
19 |
Correct |
1 ms |
10588 KB |
Output is correct |
20 |
Correct |
841 ms |
12456 KB |
Output is correct |
21 |
Correct |
788 ms |
14384 KB |
Output is correct |
22 |
Correct |
778 ms |
14160 KB |
Output is correct |
23 |
Correct |
796 ms |
14160 KB |
Output is correct |
24 |
Correct |
800 ms |
14164 KB |
Output is correct |
25 |
Correct |
848 ms |
14168 KB |
Output is correct |
26 |
Correct |
808 ms |
14164 KB |
Output is correct |
27 |
Correct |
800 ms |
14164 KB |
Output is correct |
28 |
Correct |
795 ms |
14160 KB |
Output is correct |
29 |
Correct |
839 ms |
14420 KB |
Output is correct |
30 |
Correct |
819 ms |
14164 KB |
Output is correct |
31 |
Correct |
805 ms |
14164 KB |
Output is correct |
32 |
Correct |
800 ms |
14160 KB |
Output is correct |
33 |
Correct |
804 ms |
14160 KB |
Output is correct |
34 |
Correct |
814 ms |
14272 KB |
Output is correct |
35 |
Correct |
803 ms |
14160 KB |
Output is correct |
36 |
Correct |
2311 ms |
14356 KB |
Output is correct |
37 |
Correct |
2205 ms |
14352 KB |
Output is correct |
38 |
Correct |
2340 ms |
14352 KB |
Output is correct |
39 |
Correct |
2481 ms |
14352 KB |
Output is correct |
40 |
Correct |
2660 ms |
14352 KB |
Output is correct |
41 |
Correct |
2367 ms |
14368 KB |
Output is correct |
42 |
Correct |
2335 ms |
14356 KB |
Output is correct |
43 |
Correct |
2259 ms |
14416 KB |
Output is correct |
44 |
Correct |
2274 ms |
14352 KB |
Output is correct |
45 |
Correct |
2590 ms |
14364 KB |
Output is correct |
46 |
Correct |
2324 ms |
14352 KB |
Output is correct |
47 |
Correct |
2303 ms |
14360 KB |
Output is correct |
48 |
Correct |
2236 ms |
14416 KB |
Output is correct |
49 |
Correct |
2166 ms |
14348 KB |
Output is correct |
50 |
Correct |
2111 ms |
14476 KB |
Output is correct |
51 |
Correct |
2105 ms |
14360 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
10584 KB |
Output is correct |
2 |
Correct |
2 ms |
10588 KB |
Output is correct |
3 |
Correct |
2 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
2 ms |
10588 KB |
Output is correct |
6 |
Correct |
2 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
2 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10712 KB |
Output is correct |
11 |
Correct |
2 ms |
10588 KB |
Output is correct |
12 |
Correct |
2 ms |
10588 KB |
Output is correct |
13 |
Correct |
2 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
1 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
19 |
Correct |
1 ms |
10588 KB |
Output is correct |
20 |
Correct |
841 ms |
12456 KB |
Output is correct |
21 |
Correct |
788 ms |
14384 KB |
Output is correct |
22 |
Correct |
778 ms |
14160 KB |
Output is correct |
23 |
Correct |
796 ms |
14160 KB |
Output is correct |
24 |
Correct |
800 ms |
14164 KB |
Output is correct |
25 |
Correct |
848 ms |
14168 KB |
Output is correct |
26 |
Correct |
808 ms |
14164 KB |
Output is correct |
27 |
Correct |
800 ms |
14164 KB |
Output is correct |
28 |
Correct |
795 ms |
14160 KB |
Output is correct |
29 |
Correct |
839 ms |
14420 KB |
Output is correct |
30 |
Correct |
819 ms |
14164 KB |
Output is correct |
31 |
Correct |
805 ms |
14164 KB |
Output is correct |
32 |
Correct |
800 ms |
14160 KB |
Output is correct |
33 |
Correct |
804 ms |
14160 KB |
Output is correct |
34 |
Correct |
814 ms |
14272 KB |
Output is correct |
35 |
Correct |
803 ms |
14160 KB |
Output is correct |
36 |
Correct |
2 ms |
10588 KB |
Output is correct |
37 |
Correct |
1 ms |
10588 KB |
Output is correct |
38 |
Correct |
1 ms |
10588 KB |
Output is correct |
39 |
Execution timed out |
5086 ms |
26740 KB |
Time limit exceeded |
40 |
Halted |
0 ms |
0 KB |
- |