社区讨论
求调 30pts WA
P4268[USACO18FEB] Directory Traversal G参与者 2已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mknvj4vc
- 此快照首次捕获于
- 2026/01/21 18:22 4 周前
- 此快照最后确认于
- 2026/02/11 02:29 上周
CPP
#include<bits/stdc++.h>
//#include<bits/extc++.h>
using namespace std;
typedef long long ll;
struct N {
int v;
int jd;
ll dis;
int len;
void show() {
printf("%d %d %lld %d\n ",v,jd,dis,len);
}
};
//__gnu_pbds::gp_hash_table <int, ll> f;
//__gnu_pbds::gp_hash_table <int, vector<N> > T;
unordered_map<int,ll> f;
unordered_map<int,vector<N> > T;
ll ans=LLONG_MAX;
string s;
N x;
N dfs(int ts) {
cin>>s;
int m,len=s.size();
scanf("%d",&m);
if(!m)
return {ts,1,0,len};
else {
int *a=new int[m];
int j=0;
ll d=0;
for(int i=0; i<m; i++) scanf("%d",&a[i]);
for(int i=0; i<m; i++) {
auto t=dfs(a[i]);
j+=t.jd,
d+=(!t.dis) ? (t.len)
: (t.dis + (t.len+1) * t.jd);
T[ts].push_back(t);
}
delete[] a;
return {ts,j,d,len};
}
}
void dsa(int ts) {
(ans>f[ts])&&(ans=f[ts]);
for(auto i : T[ts]) {
if (!t.dis) continue;
f[i.v]=f[ts]-(i.len+1)*i.jd+(x.jd-i.jd)*3;
dsa(i.v);
}
}
int main() {
int n;
cin>>n;
x=dfs(1);
f[1]=x.dis;
dsa(1);
printf("%lld",ans);
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...