結果
| 問題 | No.2439 Fragile Apple Tree |
| コンテスト | |
| ユーザー |
👑 potato167
|
| 提出日時 | 2023-08-16 22:16:04 |
| 言語 | C++17(gcc12) (gcc 12.4.0 + boost 1.90.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,324 bytes |
| 記録 | |
| コンパイル時間 | 7,365 ms |
| コンパイル使用メモリ | 353,624 KB |
| 実行使用メモリ | 101,964 KB |
| 最終ジャッジ日時 | 2026-07-02 04:45:07 |
| 合計ジャッジ時間 | 23,039 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 3 TLE * 1 -- * 26 |
コンパイルメッセージ
In file included from /usr/include/c++/12/bits/specfun.h:45,
from /usr/include/c++/12/cmath:1935,
from /usr/include/x86_64-linux-gnu/c++/12/bits/stdc++.h:41,
from main.cpp:21:
In static member function ‘static _Up* std::__copy_move<_IsMove, true, std::random_access_iterator_tag>::__copy_m(_Tp*, _Tp*, _Up*) [with _Tp = const int; _Up = int; bool _IsMove = false]’,
inlined from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false; _II = const int*; _OI = int*]’ at /usr/include/c++/12/bits/stl_algobase.h:501:30,
inlined from ‘_OI std::__copy_move_a1(_II, _II, _OI) [with bool _IsMove = false; _II = const int*; _OI = int*]’ at /usr/include/c++/12/bits/stl_algobase.h:528:42,
inlined from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = const int*; _OI = int*]’ at /usr/include/c++/12/bits/stl_algobase.h:535:31,
inlined from ‘_OI std::copy(_II, _II, _OI) [with _II = const int*; _OI = int*]’ at /usr/include/c++/12/bits/stl_algobase.h:626:7,
inlined from ‘static _ForwardIterator std::__uninitialized_copy<true>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const int*; _ForwardIterator = int*]’ at /usr/include/c++/12/bits/stl_uninitialized.h:147:27,
inlined from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const int*; _ForwardIterator = int*]’ at /usr/include/c++/12/bits/stl_uninitialized.h:185:15,
inlined from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = const int*; _ForwardIterator = int*; _Tp = int]’ at /usr/include/c++/12/bits/stl_uninitialized.h:372:37,
inlined from ‘void std::vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = const int*; _Tp = int; _
ソースコード
/*
cd 9996-testcase
g++ -std=gnu++17 -O2 -o val_potato p_val_potato.cpp
for i in test_in/*;
do
echo "processing $i ..."
#sed -e 's/\r$//g' $i | ./val_potato > ans.txt
./val_potato < $i > ans.txt
diff ans.txt test_out/${i:8}
done
rm ans.txt
rm val_potato
cd ../
*/
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#include "testlib.h"
using namespace std;
using ll = long long;
#define all(p) p.begin(),p.end()
#define rep(i,a,b) for(int i=(int)a;i<(int)b;i++)
const int mod=998244353;
const int MIN_N=2,MAX_N=3e5;
const int MIN_Q=1,MAX_Q=3e5;
const ll MIN_C=1,MAX_C=1e15;
const int MIN_V=2;
const ll MIN_X=1,MAX_X=1e9;
int main(){
registerValidation();
const int N=inf.readInt(MIN_N,MAX_N);
inf.readSpace();
const int Q=inf.readInt(MIN_Q,MAX_Q);
inf.readEoln();
vector<int> A(N-1),B(N-1);
vector<ll> C(N-1);
vector<vector<int>> G(N);
rep(i,0,N-1){
A[i]=inf.readInt(1,N);
inf.readSpace();
B[i]=inf.readInt(1,N);
inf.readSpace();
C[i]=inf.readLong(MIN_C,MAX_C);
inf.readEoln();
A[i]--,B[i]--;
G[A[i]].push_back(B[i]);
G[B[i]].push_back(A[i]);
}
vector<int> order={0},depth(N),wei(N),pare(N,-1);
pare[0]=-2;
rep(i,0,N){
//check connect
ensure((int)order.size()>i);
int a=order[i];
for(auto b:G[a]){
if(pare[b]==-1){
pare[b]=a;
order.push_back(b);
depth[b]=depth[a]+1;
}
}
}
rep(i,0,N){
int a=order[N-i-1];
for(auto b:G[a]){
if(pare[b]==a) wei[a]+=wei[b];
}
wei[a]++;
}
vector<ll> n_C(N),V(N);
rep(i,0,N-1){
if(depth[A[i]]>depth[B[i]]) swap(A[i],B[i]);
n_C[B[i]]=C[i];
}
swap(n_C,C);
bool q2=0;
vector<bool> remain(N,1);
rep(rp,0,Q){
int t=inf.readInt(1,2);
if(t==1){
inf.readSpace();
int u=inf.readInt(MIN_V,N);
inf.readSpace();
ll x=inf.readLong(MIN_X,MAX_X);
u--;
ensure(remain[u]);
while(u){
V[u]+=x;
if(C[u]<=V[u]){
int tmp=u;
order={u};
rep(i,0,(int)order.size()){
int a=order[i];
remain[a]=0;
for(auto x:G[a]){
if(remain[x]&&pare[x]==a) order.push_back(x);
}
}
while(u){
u=pare[u];
V[u]+=x;
V[u]-=V[tmp];
wei[u]-=wei[tmp];
}
break;
}
u=pare[u];
}
}
if(t==2){
q2=1;
cout<<wei[0]<<"\n";
}
inf.readEoln();
}
ensure(q2);
inf.readEof();
}
potato167