05:Cave Cows 1 洞穴里的牛之一

总时间限制: 10000ms单个测试点时间限制: 1000ms内存限制: 262144kB描述

很少人知道其实奶牛非常喜欢到洞穴里面去探险。

    洞窟里有N(1≤N≤100)个洞室,由M(1≤M≤1000)条双向通道连接着它们.每对洞室间

至多只有一条双向通道.有K(1≤K≤14)个洞室,里面放有1捆干草.牛吃1捆干草,体重指数就会增加1.

    贪吃的贝茜要到洞窟里面探险.她希望能吃尽量多的干草,但每条通道有一个宽度阈值,如果体重指数超过相应的阈值,贝茜就会被卡祝她从洞窟1出发,体重指数为0.在洞里溜达一圈后,她要返回洞窟1.    那她最多能吃多少捆干草呢?注意,贝茜经过一个洞室,不一定非要吃掉里面的干草.

输入第1行输入N,M,K,之后K行每行一个整数,表示在这个洞室放有一捆干草;接下来M行每行三个整数,表示一条双向通道的起点终点和宽度阈值.输出最多能吃掉的干草数.样例输入

6 7 5
1
2
3
4
5
1 2 3
3 6 2
6 2 10
2 4 1
5 1 1
4 5 1
1 6 1

样例输出

4

来源USACO 2004 Open Orange思路:贪心,把每个稻草的阈值都排一个序,能吃的就吃注意几个细节:1、要特判一号洞穴有艹的情况2.、最后要写>

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 const int MAXN=4001;
 8 const int maxn=0x3f;
 9 void read(int &n)
10 {
11     char c='+';int x=0;bool flag=0;
12     while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
13     while(c>='0'&&c<='9')
14     x=(x<<1)+(x<<3)+c-48,c=getchar();
15     flag==1?n=-x:n=x;
16 }
17 int n,m,k;
18 struct node
19 {
20     int have;
21     int need;
22     int pos;
23 }a[MAXN];
24 int map[MAXN][MAXN];
25 int dis[MAXN][MAXN];
26 int comp(const node &a,const node &b)
27 {
28     if(a.have==b.have)
29         return a.need<b.need;
30     else
31         return a.have>b.have;
32 }
33 int main()
34 {
35     read(n);read(m);read(k);
36     int num=k;
37     for(int i=1;i<=k;i++)
38     {
39         int p;
40         read(p);
41         a[p].have=1;
42         a[i].pos=i;
43     }
44     memset(map,maxn,sizeof(map));
45     for(int i=1;i<=m;i++)
46     {
47         int x,y,z;
48         read(x);read(y);read(z);
49         map[x][y]=z;
50         map[y][x]=z;
51     }
52     
53     for(int i=1;i<=n;i++)
54         map[i][i]=0;
55     
56     for(int k=1;k<=n;k++)
57         for(int i=1;i<=n;i++)
58             for(int j=1;j<=n;j++)
59                 if(map[i][j]<maxn)
60                     map[i][j]=max(map[i][j],min(map[i][k],map[k][j]));
61                 else 
62                     map[i][j]=min(map[i][k],map[k][j]);
63     
64     for(int i=1;i<=n;i++)
65         if(a[i].have)
66             a[i].need=map[1][i];
67     
68     
69     sort(a+1,a+n+1,comp);
70     
71     int now=0;
72     int flag=0;
73     for(int i=1;i<=num;i++)
74     {
75     //    if(a[i].have==0)break;
76         if(a[i].have&&a[i].pos==1)
77         {
78             flag=1;
79             continue;
80         }
81         if(a[i].need>now)
82             now++;
83     
84     }
85     if(flag==1)
86         now++;
87     printf("%d",now);
88     return 0;
89 } 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

教你一招 | Python实现无向图最短路径

一心想学习算法,很少去真正静下心来去研究,前几天趁着周末去了解了最短路径的资料,用python写了一个最短路径算法。算法是基于带权无向图去寻找两个点之间的最短路...

7485
来自专栏阮一峰的网络日志

骰子作画的算法

程序员Scott MacDonald做了一个很有趣的项目----骰子作画。 他用黑底白点的骰子。 ? 模拟出一张人像照片。 ? 把图像放大,就可以看得更清楚。 ...

35310
来自专栏鸿的学习笔记

写给开发者的机器学习指南(六)

在本节中,我们为您介绍一组在实际环境中的机器学习算法。 这些例子的想法是让你开始使用机器学习算法,而不深入解释底层算法。我们只专注于这些算法的特征方面,如何验证...

902
来自专栏人工智能LeadAI

TensorFlow从0到1 | 第十二章:TensorFlow构建3层NN玩转MNIST

上一篇 11 74行Python实现手写体数字识别展示了74行Python代码完成MNIST手写体数字识别,识别率轻松达到95%。这算不上一个好成绩,不过我并不...

37713
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

图像处理中任意核卷积(matlab中conv2函数)的快速实现。

     卷积其实是图像处理中最基本的操作,我们常见的一些算法比如:均值模糊、高斯模糊、锐化、Sobel、拉普拉斯、prewitt边缘检测等等一些和领域相关的算...

9078
来自专栏贾志刚-OpenCV学堂

基于一维级联快速膨胀与腐蚀算法

一:基本原理 膨胀与腐蚀是图像形态学两个基本操作之一,传统的代码实现都是基于二维窗口卷积模式,对于正常的3x3窗口要八次与运算,而基于一维级联方式先X方向后Y方...

3948
来自专栏AI研习社

博客 | MNIST 数据集载入线性模型

这节开始我们使用知名的图片数据库 「THE MNIST DATABASE」 作为我们的图片来源,它的数据内容是一共七a万张 28×28 像素的手写数字图片,并被...

1545
来自专栏数据小魔方

随机数函数

今天给大家分享几种常用的随机数函数! ▼ 在excel中生成随机数虽然不是很频繁的需求,但是简单了解几个随机数生成方式,偶尔还是很有帮助的。因为我们时常需要使用...

2864
来自专栏北京马哥教育

隐马尔科夫模型 python 实现简单拼音输入法

在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客(http://sobuhu....

4427
来自专栏1039778的专栏

Python 数据分析学习笔记

一、基本语法 [1507772432114_7239_1507772402948.jpg] 资料地址:http://www.icoolxue.com/album...

1.4K9

扫码关注云+社区

领取腾讯云代金券