题意:给一个N*N的矩阵C,和一个N*N的只由0和1组成的矩阵X。

   X满足以下条件:

   1.X 12+X 13+...X 1n=1 
   2.X 1n+X 2n+...X n-1n=1 
   3.任意 i (1<i<n), 都有 ∑X ki (1<=k<=n)=∑X ij (1<=j<=n).

求∑C ij*X ij(1<=i,j<=n) 的最小值(1<n<=300)。

分析:乍一看也想不到这是道最短路的题。但将模型转换后,则易想到方法。根据01矩阵X满足的条件,可将其转化为一张图,其满足条件为:点1的出度为1;点N的入度为1;任意点v(1<v<n)的入度等于出度。再用矩阵C视作边权,Cij即边 (i,j)的权值,建图。

   所求的答案是min(1->N最短路的值,或由点1出发的环加上由点N出发的环的值)。用SPFA分别对点1、点N跑两次最短路。结果即min(d[N],cir[1]+cir[N])。

 

    #include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = ; struct Spfa{
int N;
int G[maxn][maxn];
int d[maxn];
bool vis[maxn]; void init(int N){ this->N=N;} void spfa(int s){
memset(vis,,sizeof(vis));
queue<int> Q;
for(int i=;i<=N;++i){
d[i]=G[s][i];
if(i!=s){
Q.push(i);
vis[i]= true;
}
}
d[s]=INF;
while(!Q.empty()){
int x =Q.front();Q.pop();
vis[x] = false;
for(int i =;i<=N;++i){
if(x==i) continue;
if(d[i]>d[x]+G[x][i]){
d[i]=d[x]+G[x][i];
if(!vis[i]){
Q.push(i);
vis[i]=true;
}
}
}
}
}
}G; #define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int N,M,s,t,u,v,T,tmp;
while(~scanf("%d",&N)){
if(!N) break;
G.init(N);
for(int i =;i<=N;++i){
for(int j=;j<=N;++j){
scanf("%d",&G.G[i][j]);
}
}
G.spfa();
int res=G.d[N];
int cir1=G.d[];
G.spfa(N);
int cir2 = G.d[N];
res=min(res,cir1+cir2);
printf("%d\n",res);
}
return ;
}

HDU 4370 - 0 or 1 (SPFA+思维)的更多相关文章

  1. HDU 4370 0 or 1 (最短路+最小环)

    0 or 1 题目链接: Rhttp://acm.hust.edu.cn/vjudge/contest/122685#problem/R Description Given a n*n matrix ...

  2. HDU - 4370 0 or 1

    0 or 1 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  3. HDU - 4370 0 or 1 最短路

    HDU - 4370 参考:https://www.cnblogs.com/hollowstory/p/5670128.html 题意: 给定一个矩阵C, 构造一个A矩阵,满足条件: 1.X12+X1 ...

  4. HDU 4370 0 or 1(spfa+思维建图+计算最小环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4370 题目大意:有一个n*n的矩阵Cij(1<=i,j<=n),要找到矩阵Xij(i< ...

  5. 思维题(转换) HDU 4370 0 or 1

    题目传送门 题意:题目巨晦涩的传递出1点和n点的初度等于入度等于1, 其余点出度和入度相等 分析:求最小和可以转换成求最短路,这样符合条件,但是还有一种情况.1点形成一个环,n点也形成一个环,这样也是 ...

  6. HDU 4370 0 or 1 (01规划)【Dijkstra】||【spfa】

    <题目链接> 题目大意: 一个n*n的01矩阵,满足以下条件 1.X12+X13+...X1n=12.X1n+X2n+...Xn-1n=13.for each i (1<i<n ...

  7. HDU 4370 0 or 1 (最短路)

    [题目链接](http://acm.hdu.edu.cn/showproblem.ph Problem Description Given a n/n matrix Cij (1<=i,j< ...

  8. hdu 4370 0 or 1,最短路

    题目描述 给定n * n矩阵C ij(1 <= i,j <= n),我们要找到0或1的n * n矩阵X ij(1 <= i,j <= n). 此外,X ij满足以下条件: 1. ...

  9. HDU 4370 0 or 1(转化为最短路)题解

    思路:虽然是最短路专题里的,但也很难想到是最短路,如果能通过这些关系想到图论可能会有些思路.我们把X数组看做邻接矩阵,那么三个条件就转化为了:1.1的出度为1:2.n的入度为1:3.2~n-1的出度等 ...

随机推荐

  1. CI 点击图片刷新验证码

    <img src="<?php echo site_url('home/login/code'); ?>" onclick= this.src="< ...

  2. 利用jsonrpc技术包装uiautomator

    昨天一天在网上搜索解决上一篇文章中的exception: monkeyrunner内置uiautomator出错的原因 尽管没找到解决办法.可是让我无意中发现了一个好工具,比sl4a更好用的工具.直接 ...

  3. VC++ 给你的代码强制加一个硬断点

    类似与Javascript的 debugger; Hard code a debugger breakpoint If you need to insert a hard breakpoint in ...

  4. 主流数据文件类型(.dat/.txt/.json/.csv)导入到python

    手写很累,复制的同学请点赞犒劳下在下哦 ^_^ 一.对于.CSV类型的数据 它们的数据导入都很简单 且看下面一顿操作: 我平时一般是读取整个文件,直接这样就可以了: import pandas as ...

  5. ASP.NET Web API中的路由

    ASP.NET Web API的默认路由在App_Start目录中的WebApiConfig.cs文件中定义的. public static class WebApiConfig { public s ...

  6. MVC [Control与View交互]

    <1> Home控制器 using System; using System.Collections.Generic; using System.Data; using System.Da ...

  7. iOS-@2x,@3x是什么意思

    当我们在公司使用UI给出的图片时候,xxx.png,xxx@2x.png,xxx@3x.png的时候,不知道分别代表着什么! 本人也是菜鸟一枚,全凭自己尝试理解而已,在尝试中得出下面的结论: xxx. ...

  8. 你的项目应当使用Spring Boot吗?(译文)

    注:这是一篇译文,参考链接:https://www.e4developer.com/2018/09/24/should-you-use-spring-boot-in-your-project/ Spr ...

  9. Leetcode-Convert Sorted Array to BST

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. So ...

  10. Linux ssh其他服务器