<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      *題解:CF2133E I Yearned For The Mines

      原題鏈接

      解析

      不難發現對于一條鏈,直接從一個端點 check 到另一個就可以。進而發現如果要保證找到,那么每個點都需要 check 一次。結合操作次數的限制,問題變成了用不超過 \(\lfloor \frac{n}{4}\rfloor\) 次操作 2 把樹分割成若干條鏈。

      于是就會有一個想法,對于所有兒子個數為 2 的點,讓它對兩個兒子子樹中導出的鏈進行連接,這意味著父親必須斷邊,而對于所有的兒子個數大于等于 \(3\) 的點,對其斷邊,當然斷邊之后就不算是父親的兒子了。那么最壞情況就是每四個點做一次操作,滿足 \(\lfloor \frac{n}{4}\rfloor\) 的限制。

      代碼

      感覺寫得一坨,不建議看。

      /*
      */
      #include<bits/stdc++.h>
      #define eps 0.000001
      using namespace std;
      typedef unsigned long long ull;
      typedef long long ll;
      typedef pair<ll,int> pii;
      const int N = 2e5 + 5,M = 3.2e4 + 5;
      vector<int> t[N];
      bool op[N],ist[N];
      int k,f[N],lf[N],cnt[N]; 
      vector<int> v;
      struct S{
      	int u,v,tp;
      };
      vector<S> lst;
      void dfs(int x,int fa){
      	f[x] = fa;
      	bool tp = false;
      	vector<int> pos; 
      	for(int nx : t[x])if(nx != fa){
      		dfs(nx,x);
      		cnt[x] += !op[nx];
      		tp |= ist[nx];
      		if(!op[nx]){
      			pos.push_back(lf[nx]);
      		}
      	}
      	if(!cnt[x]) lf[x] = x; 
      	else if(pos.size() == 1) lf[x] = pos[0];
      	if(cnt[x] >= 3 || tp){
      		op[x] = true;
      		for(int nx : t[x])if(nx != fa && !op[nx] && cnt[nx] <= 1){
      			lst.push_back({lf[nx],nx,nx});
      		}
      		v.push_back(x);
      		k++;	
      	}else if(cnt[x] == 2){ 
      		lst.push_back({pos[0],pos[1],x});
      		ist[x] = true;
      	}else if(cnt[x] == 1 && x == 1){
      		lst.push_back({pos[0],x,x});
      	}
      }
      void print(int x,int tp){
      	cout<<1<<" "<<x<<'\n';
      	if(x == tp) return;
      	print(f[x],tp);
      }
      void rprint(int x,int tp){
      	if(x == tp) return;
      	rprint(f[x],tp);
      	cout<<1<<" "<<x<<'\n';
      }
      int main(){
      //	freopen("in.txt","r",stdin);
      //	freopen("out1.txt","w",stdout);
      	ios::sync_with_stdio(false);
      	cin.tie(0),cout.tie(0);
      	int T;
      	cin>>T;
      	while(T--){
      		int n;
      		cin>>n;
      		k = n;
      		for(int i=1;i<n;i++){
      			int u,v;
      			cin>>u>>v;
      			t[u].push_back(v);
      			t[v].push_back(u);
      		}
      		dfs(1,0);
      		cout<<k<<'\n';
      		for(int i : v){
      			cout<<2<<" "<<i<<'\n';
      		}
      		for(int i : v){
      			cout<<1<<" "<<i<<'\n';
      		}
      		for(S l : lst){
      			print(l.u,l.tp);
      			rprint(l.v,l.tp);
      		}
      		if(!cnt[1]) cout<<1<<" "<<1<<'\n';
      		lst.clear();
      		v.clear();
      		for(int i=1;i<=n;i++){
      			lf[i] = 0;
      			t[i].clear();
      			ist[i] = false;
      			cnt[i] = 0;
      			op[i] = 0;
      		}
      	} 
      	return 0;
      }
      /*
      */
      
      posted @ 2025-08-25 11:31  yuyce  閱讀(31)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩乱码视频一区二区三区| 亚洲成av人无码免费观看| 白朗县| 欧美成人精品| 久久综合久中文字幕青草| 国产成人综合在线观看不卡| 国产一区一一区高清不卡| 久久精品国产清自在天天线| 成人做爰69片免费看网站野花| 国产亚洲综合区成人国产| 久热这里有精彩视频免费| 男女性高爱潮免费网站| 中文字幕乱码熟妇五十中出| 国偷自产一区二区三区在线视频 | 国产精品白浆无码流出| 亚洲综合一区二区三区不卡| AV最新高清无码专区| 久久精品国产亚洲av麻| 国产精品中文字幕久久| 成 年 人 黄 色 大 片大 全| 亚洲成人av高清在线| 东方av四虎在线观看| 修文县| 国产精品男女爽免费视频| 国产精品久久久久影院色| 少妇人妻真实偷人精品| 精品天堂色吊丝一区二区| 亚洲精品久久麻豆蜜桃| japanese无码中文字幕| 亚洲av鲁丝一区二区三区黄| 中国熟妇牲交视频| 国产无遮挡又黄又大又爽| 无码av中文字幕久久专区| 国内精品一区二区不卡| 亚洲无人区一区二区三区| 亚洲综合一区二区三区不卡| 澳门永久av免费网站| 阿图什市| 最近中文字幕完整版hd| 国产一区二区在线影院| 一本av高清一区二区三区|