日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces - 1325F Ehabs Last Theorem(dfs树找最大环)

發布時間:2024/4/11 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 1325F Ehabs Last Theorem(dfs树找最大环) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個由 n 個結點和 m 條邊構成的無向圖,再給出一個 k ,需要在圖中完成下面任意一種操作:

  • 找到一個大小恰好為?? 的獨立集
  • 找到一個大小至少為? 的環
  • 題目分析:看了 dls 的視頻后感覺這個題目也就那回事,主要是 思路 + 證明 比較難想,有了結論后實現倒是非常簡單

    首先證明一下一定有解:假設圖中存在一個長度大于等于??的環,那么顯然滿足情況 2 ,直接輸出即可

    如果圖中不存在長度大于等于??的環,也就是說在 dfs 樹上的任意兩個點 x , y 如果距離大于等于??的話,?一定是沒有非樹邊相連的,這樣我們就可以在取獨立集時,每次都取相距恰好為??的點,換句話說,這些點的深度 deep 在對??取模后都是相同的,根據鴿巢原理,一共有??組,一共有 n 個點,n 個點分成??組,即下面的這個公式顯然成立,?,換句話說,肯定有一組中的個數是大于等于??的,也就滿足了第一種情況,證畢

    證明結束后,我們就可以在dfs樹上找到最大環,然后分類討論了

    代碼:
    ?

    #include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> #include<cassert> using namespace std;typedef long long LL;typedef unsigned long long ull;const LL inf=0x3f3f3f3f;const int N=2e5+100;int n,m,d,deep[N],pre[N],cnt[N];vector<int>node[N];void dfs(int u,int fa,int dep) {deep[u]=dep;pre[u]=fa;for(auto v:node[u]){if(v==fa)continue;if(deep[v]!=0){if(deep[u]-deep[v]+1>=0&&deep[u]-deep[v]+1>=d){puts("2");printf("%d\n",deep[u]-deep[v]+1);int num=deep[u]-deep[v]+1,pos=u;while(num--){printf("%d ",pos);pos=pre[pos];}exit(0);}}elsedfs(v,u,dep+1);} }int main() { #ifndef ONLINE_JUDGE // freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); #endif // ios::sync_with_stdio(false);scanf("%d%d",&n,&m);d=sqrt(n);if(d*d<n)d++;while(m--){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);node[v].push_back(u);}dfs(1,-1,1);for(int i=1;i<=n;i++)cnt[deep[i]%(d-1)]++;int mark=max_element(cnt,cnt+d-1)-cnt;vector<int>ans;for(int i=1;i<=n;i++)if(deep[i]%(d-1)==mark)ans.push_back(i);puts("1");for(int i=0;i<d;i++)printf("%d ",ans[i]);return 0; }

    ?

    總結

    以上是生活随笔為你收集整理的CodeForces - 1325F Ehabs Last Theorem(dfs树找最大环)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。