码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4370 0 or 1 最小环

时间:2018-10-15 20:31:51      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:路径   ons   bit   class   hdu   i++   ifd   div   一个   

#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("\n"); 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\n",min(c,s+b)); } return 0; }

 

HDU 4370 0 or 1 最小环

标签:路径   ons   bit   class   hdu   i++   ifd   div   一个   

原文地址:https://www.cnblogs.com/polya/p/9792440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!