CE

P1041 [NOIP2003 提高组] 传染病控制

```cpp #include<vector> #include<iostream> #include<algorithm> using namespace std; int n , m , q ; class tree{ int val ; vector<tree*> son; tree * fat; vector<tree*>::iterator largest; public: vector<tree*>::iterator gest() { return largest; } void solve() { int t = 0; val = 0; largest = son.begin(); for(vector<tree*>::iterator i = son.begin() ; i != son.end() ; ++i) { if((*i)->val > t) { largest = i ; t = (*i) -> val; } val += (*i)->val ; } } void cut(vector<tree*>::iterator idx) { son.erase(idx); solve(); } void push(tree * x) { son.push_back(x); solve(); if(fat != this) fat -> solve() ; } bool leaf() { return son.size() == 0; } bool head() { return this == fat; } }; int main() { cin>>n>>m>>q; tree a[518]; while(m--) { int x , y; cin>>x>>y; a[x].push(a+y); } int ans = 0; while(!a[1].leaf()) { a[1].cut( a[1].gest()); ++ans; } cout<<ans; return 0; } ```
by ___njr___ @ 2023-04-16 18:46:05


@[liuhaodong2021](/user/602624) RE
by ___njr___ @ 2023-04-16 18:46:21


|