【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蹦了无聊再来写的么 = =) [ ...
随机推荐
- 20165320 第四次实验 Android开发
实验内容: Android程序设计-1 实验要求: - 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: - 参 ...
- 【C++】数组-二分法查找
1.原理 对于给定值的查找,如果大于该数组的中间元素,下一步在元素值大的区域继续与其中间元素比较:否则下一步在元素值小的区域内继续查找,直到找到目标元素.如果到最后还没有找到,则输出"数组中 ...
- Centos7安装 mysql5.6.29 shell脚本
有很多可以借鉴的地方,故转载: 创建脚本mysql.sh,直接运行sh mysql.sh !/bin/bash if [ -d /software ] ;then cd /software else ...
- UBIFS文件系统简介 与 利用mkfs.ubifs和ubinize两个工具制作UBI镜像 (完整理解版本)
UBI文件系统简介 在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs.jffs2.yaffs2等文件系统. 它们也都是基于文件系 统+mtd+flash设备的架 ...
- redhat6.5文件共享
以下操作均需要root用户 a端: 固定nfs端口 #vi /etc/sysconfig/nfs 将里面的RQUOTAD_PORT.LOCKD_TCPPORT.LOCKD_UDPPORT.MOUNTD ...
- 删除git库中untracked files(未监控)的文件
https://blog.csdn.net/ronnyjiang/article/details/53507306 在编译git库拉下来的代码时,往往会产生一些中间文件,这些文件我们根本不需要,尤其是 ...
- Hash 分布均衡算法
1.移位实现 public static int GetIndex(string str, int count) { , (current, c) => (current << ) ...
- C++ 必须使用初始化列表
继承关系中,父类无默认构造函数 类类型类成员变量无默认构造函数 const类型成员变量 引用类型成员变量 不使用初始化列表,在创建对象调用构造函数之前会对所有的成员变量进行默认初始化,然后再执行构造函 ...
- (三)使用XML配置SQL映射器
SqlSessionFactoryUtil.java package com.javaxk.util; import java.io.IOException; import java.io.Input ...
- xcode7 创建pch文件
1.打开xcode 7.2 项目,在屏幕顶端的工具栏,选择File>New>File..>iOS>Other>PCH File,点击"next"下一步 ...