【洛谷P1828】香甜的黄油
题目大意:给定 N 个点,M 条边的无向图,在其中选定 P 个点,每个点可能被选多次,求图中的一个点到选定的 P 个点的距离的值最小是多少。
题解:由于数据范围的限制,直接 Floyd 会超时,因此对每个点做一次堆优化的 dij,统计答案贡献后更新答案即可。
代码如下
#include <bits/stdc++.h>
#define mp make_pair
using namespace std;
typedef pair<int,int> P;
const int maxn=810;
inline int read(){
    int x=0,f=1;char ch;
    do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
    do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
    return f*x;
}
struct node{
    int nxt,to,w;
}e[maxn<<2];
int tot=1,head[maxn];
inline void add_edge(int from,int to,int w){
    e[++tot]=node{head[from],to,w},head[from]=tot;
}
int num,n,m,pos[maxn],d[maxn];
bool vis[maxn];
priority_queue<P> q;
void read_and_parse(){
    num=read(),n=read(),m=read();
    for(int i=1;i<=num;i++)pos[i]=read();
    for(int i=1,x,y,z;i<=m;i++){
        x=read(),y=read(),z=read();
        add_edge(x,y,z),add_edge(y,x,z);
    }
}
void dij(int st){
    memset(d,0x3f,sizeof(d));
    memset(vis,0,sizeof(vis));
    d[st]=0,q.push(mp(0,st));
    while(q.size()){
        int u=q.top().second;q.pop();
        if(vis[u])continue;
        vis[u]=1;
        for(int i=head[u];i;i=e[i].nxt){
            int v=e[i].to,w=e[i].w;
            if(d[u]+w<d[v])d[v]=d[u]+w,q.push(mp(-d[v],v));
        }
    }
}
void solve(){
    int ans=0x3f3f3f3f;
    for(int i=1;i<=n;i++){
        dij(i);
        int tmp=0;
        for(int i=1;i<=num;i++)tmp+=d[pos[i]];
        ans=min(ans,tmp);
    }
    printf("%d\n",ans);
}
int main(){
    read_and_parse();
    solve();
    return 0;
}
【洛谷P1828】香甜的黄油的更多相关文章
- 洛谷P1828 香甜的黄油 Sweet Butter
		P1828 香甜的黄油 Sweet Butter 241通过 724提交 题目提供者JOHNKRAM 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 我的SPFA为什么TLE.. 为 ... 
- P1828 香甜的黄油 Sweet Butter 最短路 寻找一个点使得所有点到它的距离之和最小
		P1828 香甜的黄油 Sweet Butter 闲来无事 写了三种最短路(那个Floyed是不过的) 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1 ... 
- P1828 香甜的黄油 Sweet Butter
		对于这道洛谷ac而我整了一下午的codevs的题,我也是很绝望啊. 原因是队列数组开小了我勒个去???我说STL怎么能过 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧 ... 
- 洛谷 P1828 【香甜的黄油 Sweet Butter】
		这道题应该就是模板题了吧qwq. 统计每一个牧场的放糖的情况,选择最优的即可 有亿点水的绿题. #include <bits/stdc++.h> using namespace std; ... 
- [最短路]P1828 香甜的黄油 Sweet Butter
		题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ... 
- [LUOGU] P1828 香甜的黄油 Sweet Butter
		题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ... 
- P1828 香甜的黄油 Sweet Butter (spfa)
		题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ... 
- P1828 香甜的黄油 (spfa)
		[题目描述] 农夫John知道每只奶牛都在各自喜欢的牧场(一个牧场不一定只有一头牛).给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那). [题目链接] https ... 
- P1828香甜的黄油
		这是一道关于最短路的绿题. 题目给出一些农场,每个农场有奶牛,农场与农场之间存在边,要使所有奶牛到达其中一个农场的总距离最短,输出他们到达这个农场的距离.首先我想到了最小生成树,但我发现其实并不是,因 ... 
随机推荐
- POJ 3041&&3020
			两道二分图的练手题. 3041:题意大概是在一个N*N的图上有K个东西,你每次可以清除一行或一列上的所有东西.让你求最少的操作次数. 我们根据题意建图.对于每一个点的坐标(x,y)之间连一条边.比如样 ... 
- mfc CSpinButton
			知识点: CSliderCtrl(滑块)控件 CSliderCtrl常用属性 CSliderCtrl类常用成员函数 CSliderCtrl运用示例 一.CSliderCtr常用属性 Orientati ... 
- apache目录别名
			#默认家目录DocumentRoot "/var/www/html"<Directory "/var/www"> AllowOverride Non ... 
- [摘抄]从 GitHub 身上学到的 3 个创业经验
			1.找一个大问题去解决 让 Git 更容易使用是 GitHub 的目标,但它从来不是 GitHub 的最终目标.GitHub 的真正目标是让协作和编写软件变得更容易.世界上每一个软件开发者都在努力解决 ... 
- [Direct2D开发] 绘制网格
			转载请注明出处:http://www.cnblogs.com/Ray1024 一.引言 最近在使用Direct2D进行绘制工作中,需要实现使用Direct2D绘制网格的功能.在网上查了很多资料,终于实 ... 
- 软件测试----H模型
			H模型将测试活动完全独立出来,形成一个完整的流程,同时将测试准备和测试执行清晰表现出来. 测试流程: --测试准备:所有测试活动的准备判断是否到测试就绪点. --测试就绪点:测试准入准则,即是否可以开 ... 
- Java 面向对象之构造方法
			01构造方法引入 A:构造方法的引入 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象 ... 
- LeetCode-3.无重复字符的最长字串
			给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ... 
- petapoco 对存储过程的扩展  干货
			好久没发表文章了.心血来潮,简单的介绍下这次工作中的问题. 项目中运用了Petapoco,可是petapoco对存储过程的支持不够好.或者说对于某些特殊场景,petapoco的sql支持度有限. 比如 ... 
- 完善好的web项目(校园包车)
