HDU 4370 0 or 1 最小环

Posted polya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4370 0 or 1 最小环相关的知识,希望对你有一定的参考价值。

#include <bits/stdc++.h>
//题目要求01矩阵的
//第一行除了A11只能有1个1
//最后一列除了Ann只能有1个1
//除了矩阵的四条边,里面的点要求该点所在行列1的个数各自相等
//最后可以发现 如果说题目给了一个完全图的边权矩阵,那么01矩阵就显示了在这个图上的的一条路径
//巧妙的修改spfa求最小环就oK
using namespace std; #define LL long long const int maxn=3e2+10; int dis[maxn]; bool vis[maxn]; int a[maxn][maxn]; int n; int spfa(int st) { queue<int>q; memset(dis,0x3f,sizeof dis); for(int i=1;i<=n;i++) { if(i==st)continue; q.push(i); vis[i]=true; dis[i]=a[st][i]; } while(!q.empty()) { int u=q.front();q.pop();vis[u]=0; for(int v=1;v<=n;v++) { if(v==u)continue; if(dis[v]>dis[u]+a[u][v]){ dis[v]=dis[u]+a[u][v]; if(!vis[v]) q.push(v), vis[v]=1; } } } // for(int i=1;i<=n;i++) // printf("%d ",dis[i]);printf(" "); return 0; } int main() { #ifdef shuaishuai freopen("in.txt","r",stdin); #endif // shuaishuai while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)scanf("%d",&a[i][j]); int s,b,c; spfa(1); s=dis[1]; c=dis[n]; spfa(n); b=dis[n]; printf("%d ",min(c,s+b)); } return 0; }

 








以上是关于HDU 4370 0 or 1 最小环的主要内容,如果未能解决你的问题,请参考以下文章

Q - 0 or 1 HDU - 4370 (spfa最短路+最小环)

HDU - 4370 0 or 1 最短路

HDU-4370 '0 or 1' 最短路 要考虑连通性

hdu 4370 0 or 1,最短路

ACM图论—最小环问题 ( 仔细分析+理解+代码 )(HDU 1599 ) (POJ 1743)

HDU-3342-Legal or Not