题目描述

有一天,小米找到了一个藏宝的迷宫地图,迷宫在一个沙漠里有,迷宫里面有许多宝藏。迷宫里可能有N个藏宝地点,用1到K标记。藏宝地点之间最多有一条通路相连。标记1为迷宫的进出口。

他已经知道其中K(1<=K<=N)个不同的地点真的藏有宝物。小米决定让他的机器人米多奇去探险。迷宫中的通路不是平坦的,到处都是陷阱。假设每条通路都有一个危险度,其值与通过此路的载重量成正比。米多奇在经过某个藏宝地点时可能会拿走宝物。但它每拿走一个藏宝地点的宝物后,它的载重量就会增加w。

当机器人米多奇进入迷宫时,它的载重量为0。只有当米多奇携带宝物的载重量不大于某个通路的危险度时,它才能顺利通过此条道路,否则就会掉入陷阱,不能出来。

小米希望他的机器人米多奇尽量多的带出宝物,当然他更希望米多奇最后能从标记为1的地点走出去。

米多奇最多能带出多少个藏宝地点的宝物。

输入

第1行有四个数 N M K W

接下来有K行, 每行一个整数,表示藏有宝物的地点标号。

再接下来有M行,每行三个整数X,Y,Z,表示地点X与地点Y之间有一条危险度为Z的通路。

1 ≤ N ≤ 8000   1 ≤ K ≤ N   1 ≤ M ≤ 15000  1 ≤ W, Z ≤ 10000

数据保证所有的地点之间都是有道路可以到达的。

提示:机器人米多奇经过一个藏宝地点时可以不拿走宝物, 而且同一个藏宝地点可以经过多次。

数据有多组,处理到文件结束

输出

米多奇可以带走的最大宝物数量

样例输入

5 4 3 1
2
3
4
1 2 3
2 4 2
1 4 3
3 5 6

样例输出

2

不懂可以找东东学长
 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
#define Max_V 8100
#define inf 0x3f3f3f3f
using namespace std;
int n,m,k,w;
struct Edge{
int x,y,z;
};
vector<Edge> g;
bool have[Max_V];
int maxPass[Max_V];
int ik[Max_V];
int p[Max_V];
int findMax(int a,int b)
{
return a>b?a:b;
}
int findMin(int a,int b)
{
return a>b?b:a;
}
void init()
{
g.clear();
memset(have,,sizeof(have));
}
void add_edge(int x,int y,int z)
{
g.push_back((Edge){x,y,z});
g.push_back((Edge){y,x,z});
}
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int find_way()
{
memset(maxPass,,sizeof(maxPass));
maxPass[]=inf;
bool flag=true;
int u,v,z;
while(flag)
{
flag=false;
for(int i=;i<g.size();i++)
{
u=g[i].x;v=g[i].y;z=g[i].z;
int t=maxPass[v];
maxPass[v]=findMax(maxPass[v],findMin(maxPass[u],z));
if (maxPass[v]!=t)
flag=true;
}
}
int count=;
for(int j=;j<=n;j++)
if(have[j]&&maxPass[j]>=w)
ik[count++]=maxPass[j];
return count;
}
int solve()
{
int mk=find_way();
p[]=;
qsort(ik,mk,sizeof(int),cmp);
for(int i=;i<mk;i++)
{
if(ik[i]>=p[i-]*w+w)
p[i]=p[i-]+;
else p[i]=p[i-];
}
return p[mk-];
}
int main()
{
int i;
while(~scanf("%d%d%d%d",&n,&m,&k,&w))
{
init();
int loc;
for(i=;i<k;i++)
{
scanf("%d",&loc);
have[loc]=;
}
int x,y,z;
for(i=;i<m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add_edge(x,y,z);
}
printf("%d\n",solve());
}
return ;
}

NYNU_省赛选拔题(6)的更多相关文章

  1. NYNU_省赛选拔题(10)

    题目描述 Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recog ...

  2. NYNU_省赛选拔题(8)

    题目描述 一天萌萌哒孟孟学长去博物馆参观,他想看到更多的东西.博物馆可以表示为N × M细胞的一个矩形区域. “.”表示为路,“*”表示为墙壁,每个墙壁上面都挂有美丽的画卷.孟孟学长可以看到与他所在位 ...

  3. NYNU_省赛选拔题(7)

    题目描述 In computer science, a binary tree is a tree data structure in which each node has at most two ...

  4. NYNU_省赛选拔题(5)

    题目描述 P 的一家要出去旅游,买了当地的地图,发现各地分别由各个景点,若 P 想使家人分队去景点,尽快到达各个景点(必须所有景点),并且最终所有家人都到达 M 所在的景点.   你用程序告诉 P 最 ...

  5. NYNU_省赛选拔题(3)

    题目描述 二叉树,若其与自己的镜像完全相同,就称其为镜像树. 是一棵镜像树:而 不是镜像树.现给你一棵二叉树,请你判断其是不是镜像树. 输入 第一行是一个整数数T,表示测试数据有多少组每组数据第一行是 ...

  6. 2013杭州现场赛B题-Rabbit Kingdom

    杭州现场赛的题.BFS+DFS #include <iostream> #include<cstdio> #include<cstring> #define inf ...

  7. 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路

    这篇文章主要是介绍下C题的解题思路,首先我们对这道C题进行一个整体的概括,结构如下: C题:经济类 第一问:发现危险人群. 发现:欺诈的方式开始.雇佣或浪漫的承诺. 数据→确定特定的经济萧条地区→确定 ...

  8. 2013年山东省赛F题 Mountain Subsequences

    2013年山东省赛F题 Mountain Subsequences先说n^2做法,从第1个,(假设当前是第i个)到第i-1个位置上哪些比第i位的小,那也就意味着a[i]可以接在它后面,f1[i]表示从 ...

  9. 2013年省赛H题

    2013年省赛H题你不能每次都快速幂算A^x,优化就是预处理,把10^9预处理成10^5和10^4.想法真的是非常巧妙啊N=100000构造两个数组,f1[N],间隔为Af2[1e4]间隔为A^N,中 ...

随机推荐

  1. Linux下安装Oracle11g服务器(转)

    安装环境 Linux服务器:SuSe10 sp2 64位 Oracle服务器:Oracle11gR2 64位 系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的物理内存 ...

  2. 【原创】纯OO:从设计到编码写一个FlappyBird (三)

    第二部分请点这里 下面首先来实现Bing接口! 实现Bing接口的类取名SimpleBing. 容易发现,SimpleBing类总的来说要向下,但点击一下又得向上,向上到了一定界限又得向下,但我们又只 ...

  3. appendChild的用法

    appendChild的用法 1,先把元素从原有父级上删除 2,再把元素添加到新父级上

  4. Objective-C该Protocol

    Objective-C该Protocol Protocol 简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现,这样的模式一般称为(delegation)模式 在iOS中和OS X中,A ...

  5. AsyncSocket长连接棒包装问题解决

    project正在使用长连接快来server沟通.因此,指定我们的协议前两个字节为数据长度来区分数据包 app这边数据有两种传输形式: 1.app主动请求所须要的数据: 2.app异步接收来自服务端的 ...

  6. 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构

    前几天向大家介绍了一种用工具类生成数据表的方法,只是之前的方法须要使用一个跟项目关系不大的工具类.不免让人认为有些多余,所以呢.今天再向大家介绍一种方法.即Hibernate与Spring配合生成表结 ...

  7. IDF - CTF - 牛刀小试

    找学校CTF好地方,IDF实验室CTF训练营(http://ctf.idf.cn/). . 刚接触CTF.来玩下牛刀小试.AK了. . 好爽好爽.. 1.摩斯password 嘀嗒嘀嗒嘀嗒嘀嗒 时针它 ...

  8. Attribute(两)——定义自己的特色+Asp.net MVC中间filter详细解释

    部分博客是预先定义的有关特性的一些基本特征,同时还Attribute这一概念的一个宏观上的认识,在上篇博客结尾介绍了有关为自己定义特性服务的AttributeUsage,这篇博客主要是通过filter ...

  9. MEF初体验之十一:查询组合容器

    查询组合容器 组合容器暴露了几个get exports的重载方法和导出对象和对象集合.你需要注意下面的行为: 当请求单个对象实例时,如果未发现导出,一个异常将被抛出 当请求单个对象实例时,如果发现超过 ...

  10. asp.net webapi 多文件上传

    使用enctype="multipart/form-data"来进行操作 /// <summary> /// 上传图片 /// </summary> /// ...