【Floyd(并非水题orz)】BZOJ4093-[Usaco2013 Dec]Vacation Planning
最近刷水太多标注一下防止它淹没在silver的水题中……我成为了本题,第一个T掉的人QAQ
【题目大意】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXK=+;
const int MAXN=+;
const ll INF=1e12;
struct node
{
int to,dis;
};
vector<node> E[MAXN];
int n,m,k,q;
ll d[MAXK][MAXK],dis[MAXK][MAXN];
int id[MAXN],num[MAXN]; void addedge(int u,int v,int w)
{
E[u].push_back((node){v,w});
} void init()
{
scanf("%d%d%d%d",&n,&m,&k,&q);
memset(id,,sizeof(id)); for (int i=;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
}
for (int i=;i<=k;i++)
{
int x;
scanf("%d",&x);
id[x]=i,num[i]=x;
}
} void prep()
{
for (int i=;i<=k;i++)
for (int j=;j<=k;j++)
d[i][j]=INF;
for (int i=;i<=k;i++) d[i][i]=;
for (int i=;i<=k;i++)
{
int u=num[i];
for (int j=E[u].size()-;j>=;j--)
{
int v=E[u][j].to;
if (id[v]) d[i][id[v]]=min(d[i][id[v]],(ll)E[u][j].dis);
else
{
for (int _k=E[v].size()-;_k>=;_k--)
{
int vto=E[v][_k].to;
if (id[vto] && vto!=num[i]) d[id[u]][id[vto]]=min(d[id[u]][id[vto]],(ll)E[u][j].dis+(ll)E[v][_k].dis);
}
}
}
} for (int _k=;_k<=k;_k++)
for (int i=;i<=k;i++)
for (int j=;j<=k;j++)
if (i!=j && j!=_k && _k!=i) d[i][j]=min(d[i][j],d[i][_k]+d[_k][j]);
} void prep2()
{
for (int i=;i<=k;i++)
for (int j=;j<=n;j++) dis[i][j]=INF;
for (int i=;i<=k;i++)
for (int j=;j<=k;j++) dis[i][num[j]]=d[i][j]; for (int i=;i<=k;i++)
{
for (int _k=;_k<E[num[i]].size();_k++)//注意这里是E[num[i]]不是num[i],检查了40分钟才发现QAQ
for (int j=;j<=k;j++)
{
int to=E[num[i]][_k].to;
dis[j][to]=min(dis[j][to],d[j][i]+E[num[i]][_k].dis);
}
}
} void solve()
{
int t=;
ll totalans=;
for (int i=;i<q;i++)
{
int a,b;
scanf("%d%d",&a,&b);
ll ans=INF;
if (id[a]) ans=dis[id[a]][b];
else
{
for (int j=;j<E[a].size();j++)
{
int v=E[a][j].to;
if (id[v]) ans=min(ans,E[a][j].dis+dis[id[v]][b]);
}
}
if (ans<INF)
{
totalans+=ans;
t++;
}
}
printf("%d\n",t);
printf("%d",totalans);
} int main()
{
init();
prep();
prep2();
solve();
return ;
} /*
TLE的solve,答案是正确的QAQ
void solve()
{
int t=0;
ll totalans=0;
for (int i=1;i<=q;i++)
{
int a,b;
ll ans=INF;
scanf("%d%d",&a,&b);
if (id[a] && id[b]) ans=d[id[a]][id[b]];
else if (id[a])
{
for (int ib=0;ib<rE[b].size();ib++) ans=min(ans,d[id[a]][id[rE[b][ib].to]]+(ll)rE[b][ib].dis);
}
else if (id[b])
{
for (int ia=0;ia<E[a].size();ia++) ans=min(ans,d[id[E[a][ia].to]][id[b]]+(ll)E[a][ia].dis);
}
else
{
for (int ia=0;ia<E[a].size();ia++)
for (int ib=0;ib<rE[b].size();ib++)
{
ll now=(ll)E[a][ia].dis+(ll)rE[b][ib].dis;
now+=d[id[E[a][ia].to]][id[rE[b][ib].to]];
ans=min(ans,now);
}
}
if (ans!=INF) t++,totalans+=ans;
}
printf("%d\n",t);
printf("%lld",totalans);
}*/
【Floyd(并非水题orz)】BZOJ4093-[Usaco2013 Dec]Vacation Planning的更多相关文章
- bzoj 4097: [Usaco2013 dec]Vacation Planning
4097: [Usaco2013 dec]Vacation Planning Description Air Bovinia is planning to connect the N farms (1 ...
- bzoj4097 [Usaco2013 dec]Vacation Planning
Description Air Bovinia is planning to connect the N farms (1 <= N <= 200) that the cows live ...
- [Usaco2013 DEC] Vacation Planning
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4093 [算法] 对于k个枢纽 , 分别在正向图和反向图上跑dijkstra最短路 , ...
- 没讲明白的水题orz
有一道解释程序的水题没给非计算机专业的同学讲明白orz,在这里再练一下.. 源代码完全没有缩进真是难以忍受.. p.s.懂递归就不用看了#include <stdio.h> int n = ...
- 变形课 HDU - 1181 【floyd传递闭包水题】
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个 ...
- UESTC 30 最短路,floyd,水
最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Statu ...
- Codeforces Round #190 (Div. 2) 水果俩水题
后天考试,今天做题,我真佩服自己... 这次又只A俩水题... orz各路神犇... 话说这次模拟题挺多... 半个多小时把前面俩水题做完,然后卡C,和往常一样,题目看懂做不出来... A: 算是模拟 ...
- BZOJ两水题连发~(BZOJ1854&&BZOJ1191)
前言:两题都是省选题不过水的惊人,且都可以用二分图最大匹配做哎--- 1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: ...
- BZOJ USACO 银组 水题集锦
最近刷银组刷得好欢快,好像都是水题,在这里吧他们都记录一下吧(都是水题大家一定是道道都虐的把= =)几道比较神奇的题到时再列出来单独讲一下吧= =(其实我会说是BZOJ蹦了无聊再来写的么 = =) [ ...
随机推荐
- 未来人类T5 安装win10,ubuntu双系统
1.首先确保win10已经安装,u盘中已刻录好系统,下载好英伟达最新驱动保存在u盘中,压缩100g的磁盘空间给ubuntu. 2.设置双显卡模式,重启时按F7选择进入u盘启动. 3.进入安装界面,选择 ...
- elasticsearch-head插件安装的一些坑!es6.5.4版本
折腾了一晚上,总算成功了!,大部分坑都记录了下来,版本升级太快真实个大坑,每个版本都不一样,学的心累!! 这坑太多了!主要就是以下几点最主要的: 因为我这里只使用hear安装,不使用哪个打包工具,所以 ...
- js实现ctrl+v粘贴图片或是截图
浏览器环境:谷歌浏览器 1.ctrl+v粘贴图片都是监听paste时间实现的,复制的数据都存在clipboardData下面,虽然打印显示数据长度为0,但是还是可以获取数据的 2.打印clipboar ...
- vue全面介绍--全家桶、项目实例
简介 “简单却不失优雅,小巧而不乏大匠”. 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们 ...
- Python学习1-Python和Pycharm的下载与安装
本文主要介绍Python的下载安装和Python编辑器Pycharm的下载与安装. 一.Python的下载与安装 1.下载 到Python官网上下载Python的安装文件,进入网站后显示如下图: 网速 ...
- mysql数据库主从同步复制原理
MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQ ...
- conding.net或github,readme.md添加图片
原因: 将图片放在仓库里面,在文件里链接它,最后 push 到 github 上.github 图片链接格式:(http://github.com/yourname/your-repositor ...
- java正则表达式(转)
1.验证email public static void main(String[] args) { // 要验证的字符串 String str = "service@xsoftlab.ne ...
- 如何用python解析mysqldump文件
一.前言 最近在做离线数据导入HBase项目,涉及将存储在Mysql中的历史数据通过bulkload的方式导入HBase.由于源数据已经不在DB中,而是以文件形式存储在机器磁盘,此文件是mysqldu ...
- 洛谷P1331 海战 题解
题目传送门 思路 肯定食用dfs啦... 但关键是两条船接触了怎么判断呢?? 上图: 可以发现一下规律 当两条船接触时,必有一条直线连续穿过两条船 当一条船不与另一条船接触时,没有一条直线连续穿过两条 ...