HDU - 4370

参考:https://www.cnblogs.com/hollowstory/p/5670128.html

题意:

  给定一个矩阵C, 构造一个A矩阵,满足条件:

    1.X12+X13+...X1n=1
    2.X1n+X2n+...Xn-1n=1
    3.for each i (1<i<n), satisfies ∑Xki (1<=k<=n)=∑Xij (1<=j<=n).

  使得∑Cij*Xij(1<=i,j<=n)最小。

思路:

  理解条件之前先转换一下思维,将矩阵C看做描述N个点花费的邻接矩阵
  再来看三个条件:
    条件一:表示1号点出度为1
    条件二:表示n号点入度为1
    条件三:表示k( 1 < k < n )号点出度等于入度
  最后再来看看题目要求,∑Cij*Xij(1<=i,j<=n),很明显,这是某个路径的花费,而路径的含义可以有以下两种:
  一:1号点到n号点的花费
  二:1号点经过其它点成环,n号点经过其它点成环,这两个环的花费之和
  于是,就变成了一道简单的最短路问题
  关于环花费的算法,可以改进spfa算法,初始化dis[start] = INF,且一开始让源点之外的点入队
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <list>
#include <map>
#include <set>
#include <cassert> using namespace std;
//#pragma GCC optimize(3)
//#pragma comment(linker, "/STACK:102400000,102400000") //c++
// #pragma GCC diagnostic error "-std=c++11"
// #pragma comment(linker, "/stack:200000000")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
// #pragma GCC optimize("-fdelete-null-pointer-checks,inline-functions-called-once,-funsafe-loop-optimizations,-fexpensive-optimizations,-foptimize-sibling-calls,-ftree-switch-conversion,-finline-small-functions,inline-small-functions,-frerun-cse-after-loop,-fhoist-adjacent-loads,-findirect-inlining,-freorder-functions,no-stack-protector,-fpartial-inlining,-fsched-interblock,-fcse-follow-jumps,-fcse-skip-blocks,-falign-functions,-fstrict-overflow,-fstrict-aliasing,-fschedule-insns2,-ftree-tail-merge,inline-functions,-fschedule-insns,-freorder-blocks,-fwhole-program,-funroll-loops,-fthread-jumps,-fcrossjumping,-fcaller-saves,-fdevirtualize,-falign-labels,-falign-loops,-falign-jumps,unroll-loops,-fsched-spec,-ffast-math,Ofast,inline,-fgcse,-fgcse-lm,-fipa-sra,-ftree-pre,-ftree-vrp,-fpeephole2",3) #define lson (l , mid , rt << 1)
#define rson (mid + 1 , r , rt << 1 | 1)
#define debug(x) cerr << #x << " = " << x << "\n";
#define pb push_back
#define pq priority_queue typedef long long ll;
typedef unsigned long long ull; typedef pair<ll ,ll > pll;
typedef pair<int ,int > pii;
typedef pair<int,pii> p3; //priority_queue<int> q;//这是一个大根堆q
//priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
#define fi first
#define se second
//#define endl '\n' #define OKC ios::sync_with_stdio(false);cin.tie(0)
#define FT(A,B,C) for(int A=B;A <= C;++A) //用来压行
#define REP(i , j , k) for(int i = j ; i < k ; ++i)
#define max3(a,b,c) max(max(a,b), c);
//priority_queue<int ,vector<int>, greater<int> >que; const ll mos = 0x7FFFFFFF; //
const ll nmos = 0x80000000; //-2147483648
const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f; //18
// const int mod = 10007;
const double esp = 1e-;
const double PI=acos(-1.0);
const double PHI=0.61803399; //黄金分割点
const double tPHI=0.38196601; template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} /*-----------------------showtime----------------------*/
const int maxn = ;
int n;
int dis[maxn],a[maxn][maxn],vis[maxn];
void spfa(int s){
stack<int>q;
for(int i=; i<=n; i++){
dis[i] = a[s][i];
if(i!=s){
q.push(i);
vis[i] = true;
}
else vis[i] = false;
}
dis[s] = inf;
while(!q.empty()){
int u = q.top();q.pop();
vis[u] = false;
for(int i=; i<=n; i++){
if(u==i)continue;
if(dis[i] > dis[u] + a[u][i]){
dis[i] = dis[u] + a[u][i];
if(vis[i] == false)q.push(i), vis[i] = true;
}
}
}
} int main(){
while(~scanf("%d", &n)){
for(int i=; i<=n; i++){
for(int j=; j<=n; j++){
scanf("%d", &a[i][j]);
}
}
spfa();
int ans = dis[n];
int a1 = dis[];
spfa(n);
a1 += dis[n];
printf("%d\n", min(a1, ans));
}
return ;
}

HDU4370

最新文章

  1. 通过属性 Cesium的FBO主要支持两种方式
  2. MVC学习Day02
  3. 统一使用GPT分区表,安装MAC 10.10 和 Win8.1 pro双系统
  4. tab栏切换的特殊效果(类似网易的登陆栏效果)
  5. Android——AnimationDrawable 实现动画
  6. Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
  7. 【DataStructure In Python】Python模拟栈和队列
  8. sql - 查询所有表中包含指定值
  9. RH033读书笔记(7)-Lab 8 Introduction to String Processing
  10. 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路
  11. Red Hat 7.0 DNS服务配置笔记
  12. Asp.Net MVC 中JS通过ajaxfileupload上传图片获取身份证姓名、生日、家庭住址等详细信息
  13. Thinkphp5.0支付宝支付扩展库类库大全
  14. Word2vec教程
  15. 【Unity&amp;C#】lambda函数
  16. dubbo的服务发现和注册如何实现
  17. Shiro学习笔记(一)
  18. 题目1447:最短路(Floyd算法)
  19. 2018.09.29 bzoj3166: [Heoi2013]Alo(01trie+双向链表)
  20. gj11 多线程、多进程和线程池编程

热门文章

  1. Thinkphp 3.2.3 parseWhere设计缺陷导致update/delete注入 分析
  2. Flink状态专题:keyed state和Operator state
  3. Pow共识算法
  4. C# Winform 自定义控件——TextBox
  5. 8、JAVA中的用户输入(I/0交互过程)
  6. Meta 用法汇总
  7. nginx负载均衡策略url_hash配置方法
  8. java秒杀系列(2)- 页面静态化技术
  9. HBase的高可用(HA)
  10. 这些用来审计 Kubernetes RBAC 策略的方法你都见过吗?