- [POI2006]Kra-The Disks
洛谷切了这里70
- 2021-8-13 8:08:30 @
RT
2 条评论
-
Macesuted QWQ LV 10 SU @ 2021-8-13 9:54:01
Luogu 上的第一篇题解可以通过此题。
请检查你的程序是否一定可以通过数据范围内的所有测试数据,造成两 OJ 上不同得分的原因可能是两边的测试数据不同。
-
2021-8-13 8:08:52@
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<queue> #include<stack> #include<vector> #include<set> #include<map> #include<algorithm> //#include<unordered_set> using namespace std; #define int long long const int N = 5*1e5*2 * 2+10,M = 110,inf = 0x3f3f3f3f; template <class T> void read(T &w){ w=0;int f=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){(w*=10)+=ch-'0';ch=getchar();} w*=f; } template <class T> void write(T w){ if(w<0){putchar('-');w*=-1;} if(w/10) write(w/10); putchar(w%10+'0'); } int h[N], ne[N], e[N], w[N], idx = 1; int in[N], dep[N]; int f[N]; int n,s; int ans = 0; void add(int a,int b,int c) { e[idx] = b; ne[idx] = h[a]; w[idx] = c; h[a] = idx ++; } void dfs1(int u,int fa) { for(int i = h[u]; ~i; i = ne[i]) { int y = e[i]; if(y == fa) continue; dfs1(y,u); dep[u] = max(dep[y] + w[i], dep[u]); } } void dfs2(int u,int fa) { for(int i = h[u]; ~i; i = ne[i]) { int y = e[i]; if(y == fa) continue; dfs2(y,u); f[u] += f[y] + dep[u] - (dep[y] + w[i]); } } signed main() { read(n); read(s); memset(h, -1, sizeof h); for(int i = 1; i <= n - 1; i ++) { int a,b,t; read(a), read(b), read(t); add(a,b,t), add(b,a,t); in[a] ++, in[b] ++; } dfs1(s,0); //------------------------------------------------------------------------- dfs2(s,0); write(f[s]); return 0; }
- 1
信息
- ID
- 1060
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 15
- 已通过
- 5
- 上传者