c++17转c求助

学术版

@[STARS_czy](/user/656765) 你这个把输出函数和输入函数一改就行了
by Doors_Cross @ 2024-03-18 16:08:42


@[Doors_Cross](/user/1157659) 哦哦哦C语言有 `for auto` 还有 `vector`
by chat_jinxuan @ 2024-03-18 16:11:20


@[Doors_Cross](/user/1157659) @[chat_jinxuan](/user/726525) 好了。原来A的程序现在 T 了,能不能帮忙看看。 ```cpp #include <stdio.h> #include <string.h> #define int long long typedef long long ll; const int mod = 998244353; int T, n, idtt, eu[400010], ev[400010], ew[400010], dep[400010], sz[400010], fa[400010]; int hs[400010], lt[400010], id[400010], tmp[400010], val[400010], mx[400010]; int ett,head[400010],nxt[400010],to[400010],hv[400010]; void inserte(int u,int v,int w){ to[++ett]=v; nxt[ett]=head[u]; hv[ett]=w; head[u]=ett; } void dfs1(int u){ sz[u] = 1; for (int i = head[u]; i; i=nxt[i]) { int v = to[i]; int w = hv[i]; if (v != fa[u]) { fa[v] = u; val[v] = w; dep[v] = dep[u] + 1; dfs1(v); sz[u] += sz[v]; if (sz[v] > sz[hs[u]]) hs[u] = v; } } } void dfs2(int u){ if (!lt[u]) lt[u] = u; lt[hs[u]] = lt[u]; tmp[id[u] = ++idtt] = val[u]; if (hs[u]) dfs2(hs[u]); for (int i = head[u]; i; i=nxt[i]) { int v = to[i]; if (v != fa[u] && v != hs[u]) dfs2(v); } } void pushup(int id) { mx[id] = mx[id << 1] > mx[id << 1 | 1] ? mx[id << 1] : mx[id << 1 | 1]; } void build(int id, int l, int r, int *tmp) { if (l == r) { mx[id] = tmp[l]; return; } int mid = (l + r) >> 1; build(id << 1, l, mid, tmp); build(id << 1 | 1, mid + 1, r, tmp); pushup(id); } void change(int id, int l, int r, int k, int x) { if (l == r) { mx[id] = x; return; } int mid = (l + r) >> 1; if (k <= mid) change(id << 1, l, mid, k, x); else change(id << 1 | 1, mid + 1, r, k, x); pushup(id); } int query(int id, int l, int r, int lq, int rq) { if (lq <= l && r <= rq) return mx[id]; int mid = (l + r) >> 1, ls = 0,rs=0; if (lq <= mid) ls = query(id << 1, l, mid, lq, rq); if (rq > mid) rs = query(id << 1 | 1, mid + 1, r, lq, rq); return ls>rs?ls:rs; } signed main() { int i, o; scanf("%d", &T); while (T--) { scanf("%d", &n); idtt = 0,ett=0; for (i = 1; i <= n - 1; ++i) { scanf("%lld %lld %lld", &eu[i], &ev[i], &ew[i]); inserte(eu[i],ev[i],ew[i]),inserte(ev[i],eu[i],ew[i]); } dfs1(1); dfs2(1); build(1, 1, n, tmp); for (o = 1; o <= 3e5; ++o) { int u, v, k, w, ans = 0; char opt[10]; scanf("%s", opt); if (strcmp(opt, "DONE") == 0) break; if (strcmp(opt, "CHANGE") == 0) { scanf("%lld %lld", &k, &w); if (dep[eu[k]] < dep[ev[k]]) { int temp = eu[k]; eu[k] = ev[k]; ev[k] = temp; } change(1, 1, n, id[eu[k]], w); continue; } scanf("%lld %lld", &u, &v); for (; lt[u] != lt[v]; u = fa[lt[u]]) { if (dep[lt[u]] < dep[lt[v]]) { int temp = u; u = v; v = temp; } ans = ans > query(1, 1, n, id[lt[u]], id[u]) ? ans : query(1, 1, n, id[lt[u]], id[u]); } if (id[u] > id[v]) { int temp = u; u = v; v = temp; } if (u != v) ans = ans > query(1, 1, n, id[u] + 1, id[v]) ? ans : query(1, 1, n, id[u] + 1, id[v]); printf("%lld\n", ans); } memset(hs, 0, sizeof(hs)); memset(lt, 0, sizeof(lt)); memset(nxt, 0, sizeof(nxt)); memset(to, 0, sizeof(to)); memset(hv, 0, sizeof(hv)); } return 0; }
by STARS_czy @ 2024-03-18 16:22:11


你不配
by danwei1 @ 2024-03-18 16:23:12


@[STARS_czy](/user/656765) 这就A了
by chat_jinxuan @ 2024-03-18 16:25:04


@[danwei1](/user/737864) ???
by STARS_czy @ 2024-03-18 16:27:04


A 了,感谢。
by STARS_czy @ 2024-03-18 16:34:58


|