[USACO09FEB]环绕岛屿Surround the Islands

[USACO09FEB]环绕岛屿Surround the Islands,第1张

概述[Time Gate]  https://www.luogu.org/problemnew/show/P2941 【解题思路】 Tarjan缩点,再在所有强连通分量中找一条最小的边作为强连通分量的边,因为还要回来,所以Ans最后要乘二 【code】 1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int read()

[Time Gate] 

https://www.luogu.org/problemnew/show/P2941

【解题思路】

Tarjan缩点,再在所有强连通分量中找一条最小的边作为强连通分量的边,因为还要回来,所以Ans最后要乘二

【code】

 1 #include<bits/stdc++.h> 2 using @R_419_6889@space std; 3 inline int read() 4 { 5     int x=0; 6     char c=getchar(); 7     bool flag=0; 8     while(c<0||c>9) {if(c==-)flag=1;c=getchar();} 9     while(c>=0&&c<=9){x=(x+(x<<2)<<1)+ c-0;c=getchar();}10     return flag?-x:x;11 }12 const int N=5005;13 int n,step,tcl,ans=1e9+7; 14 vector<int>G[N];15 vector<int>cg[N];16 int dfn[N],vis[N],col[N],low[N];17 stack<int>s;18 int d[N][N];19 inline voID tarjan(int Now)20 {21     vis[Now]=1;22     s.push(Now);23     low[Now]=dfn[Now]=++step;24     for(int i=0;i<G[Now].size();++i)25     {26         int to=G[Now][i];27         if(!dfn[to])28         {29             tarjan(to);30             low[Now]=min(low[Now],low[to]);31         }32         else if(vis[to]) low[Now]=min(low[Now],dfn[to]);33     }34     if(dfn[Now]==low[Now])35     {36         col[Now]=++tcl;37         vis[Now]=0;38         while(1)39         {40             int x=s.top();s.pop();41             col[x]=tcl;42             vis[x]=0;43             if(Now==x) break;44         }45     }46 }//板子47 int main()48 {49     n=read();50     for(int i=1;i<=n;++i) 51     {52         int x=read(),y=read();53         G[x].push_back(y),G[y].push_back(x);54     }//双向边55     for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i);56     memset(d,0x3f3f,sizeof(d));//初始化(我就是忘记然后挂了一次)57     for(int i=1;i<=n;++i)58     {59       for(int j=1;j<=n;++j) 60       {61         int x=read();62         if(i==j) continue;63         d[col[i]][col[j]]=min(d[col[i]][col[j]],x);64       }65     }66     for(int i=1;i<=tcl;++i)67     {68         int res=0;69         for(int j=1;j<=tcl;++j) if(i!=j) res+=d[i][j];70         ans=min(ans,res);71     }//暴力枚举答案72     printf("%d\n",ans*2);73 }
总结

以上是内存溢出为你收集整理的[USACO09FEB]环绕岛屿Surround the Islands全部内容,希望文章能够帮你解决[USACO09FEB]环绕岛屿Surround the Islands所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存