1. 程式人生 > >題解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思維)

題解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思維)

emp ant sta pan int algorithm turn oid ring

還是dfs?

好像自己寫的有鍋

過不去

看了題解修改了才過qwq

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include <set>
using namespace std;
int u[200010],v[200010],n,m,k,ans;
bool isdel[200010],vis[200010];
set<int> sons[200010];
stack<int> S;
void dfs(int u){
  
if(sons[u].size()>=k) return; if(vis[u]) return; vis[u]=true; ans--; for(auto i=sons[u].begin();i!=sons[u].end();i++){ sons[*i].erase(u); dfs(*i); } sons[u].clear(); } int main(){ scanf("%d %d %d",&n,&m,&k); for(int i=1;i<=m;i++){ scanf(
"%d %d",&u[i],&v[i]); sons[u[i]].insert(v[i]); sons[v[i]].insert(u[i]); } ans=n; for(int i=1;i<=n;i++) dfs(i); if(ans>=k){ S.push(ans); } else S.push(0); for(int i=m;i>=2;i--){ sons[u[i]].erase(v[i]); sons[v[i]].erase(u[i]); dfs(u[i]); dfs(v[i]);
if(ans>=k){ S.push(ans); } else S.push(0); } while (!S.empty()) { printf("%d\n",S.top()); S.pop(); } return 0; }

題解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思維)