1142A Walk Through the Forest

2024-05-05 05:48
文章标签 walk forest 1142a

本文主要是介绍1142A Walk Through the Forest,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目大意:

公司和家之间隔着一片森林,回家的路有多条,但是每两个岔路口之间只有一条直通的路,如果从公司出发,走a->b这条路的前提是a到家的距离要比b到家的距离远。现在问你最多有多少种走法!

解题思路:

       没认真分析完题目就开始写代码的都是瞎搞,分析完题目后不认真写代码的都是扯淡,出现bug后只会找关键点错误的更是傻逼,为了赋值的时候多写了个==找了大半天,oh!no!. 

      本题其实就是先利用dijkstra,spfa,bellman中的任意一种先计算出各个点到家的最短路,然后dfs出所有满足条件的可能即可!

#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
#define N 1005
#define inf 0x3fffffff
using namespace std;
struct node{int v;int dis;
};
int dis[N],dp[N];
vector<node>G[N];
bool in_s[N];
struct cmp
{bool operator()(int a,int b){return dis[a]>dis[b];}
};
void spfa(int st,int n){int ui,vi,i,cur,di;for(i=0;i<=n;i++){dis[i]=inf;in_s[i]=false;}priority_queue<int,vector<int>,cmp> s;s.push(st);in_s[st]=true;dis[st]=0;while(!s.empty()){cur=s.top();s.pop();in_s[cur]=false;//这个等号找了半天,啥也不说了!for(i=0;i<G[cur].size();i++){vi=G[cur][i].v;di=G[cur][i].dis;if(dis[vi]>dis[cur]+di){dis[vi]=dis[cur]+di;if(!in_s[vi]){in_s[vi]=true;s.push(vi);}}}}
}
int dfs(int vi){if(vi==2)return 1;if(dp[vi]>0)return dp[vi];for(int i=0;i<G[vi].size();i++){int to=G[vi][i].v;if(dis[vi]>dis[to]){dp[vi]+=dfs(to);}}return dp[vi];
}
int main()
{int n,m,a,b,d,i,j;node temp;while(scanf("%d",&n)&&n){scanf("%d",&m);for(i=0;i<=n;i++)G[i].clear();for(i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&d);temp.dis=d;temp.v=a;G[b].push_back(temp);temp.v=b;G[a].push_back(temp);}spfa(2,n);memset(dp,0,sizeof(dp));printf("%d\n",dfs(1));}}



这篇关于1142A Walk Through the Forest的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/960923

相关文章

python中的os.walk()方法学习

"""os.listdir(path) 只能返回当前path路径下的文件和文件夹,不包含子目录中的内容,并且不包含路径,只是文件或文件夹名字.os.walk(path)用来遍历一个目录内各个子目录和子文件每次遍历的对象返回的都是一个三元组(root, dirs, files)root:指的是当前正在遍历的这个文件夹本身的地址,也就是walk传进去的那个目录地址dirs:是一个list,

1034 forest

大水题,WA到吐了,结果发现犯了一弱智错误,擦 1.定义dept[]数组,主要用bfs ,将子节点的dept值累加父节点的dept值,遍历一颗或者若干树。从根节点(bepointed[]值为false的点)出发遍历全棵树。 2.存储方式:邻接表存边 vector+queue  , #include <iostream>#include<queue>#include<vector>

孤立森林 Isolation Forest 论文翻译(上)

README 自己翻译的+参考有道,基本是手打的可能会有很多小问题。 括号里的斜体单词是我觉得没翻译出那种味道的或有点拿不准的或翻译出来比较奇怪的地方,尤其是profile、swamping和masking这三个词不知道怎样更准确。 欢迎指正和讨论,需要Word版可以留言。 孤立森林 摘要         大多数现有的基于模型的异常检测算法构建了一个正常实例的特征轮廓(profil

python os.walk的返回值

在做复杂的路径遍历的时候,遍历的模式不好定义,只有通过递归的方式来做。 递归的实现在python中有os.walk,它将遍历的所有结果保存在一个结构中使用for循环即可,所以这个函数很有用。 唯一麻烦的是for循环有三个值,分别代表当前的遍历目录,文件夹,文件。以前一直记不住他们的顺序,今天突然灵感爆发。 使用 p, d, f 来代替,PDF是常见的文件格式,记起来比较方便。 p代表PATH

python学习之pathlib和walk

一、`pathlib` 是 Python 的一个标准库模块,它提供了一系列用于操作文件系统路径的类。`pathlib` 旨在提供一个面向对象的文件系统路径操作接口,使得路径操作更加直观和易于使用。 以下是 `pathlib` 的一些关键特性: 1. **面向对象的接口**:`pathlib` 中的 `Path` 类提供了一个面向对象的方式来处理文件系统路径。 2. **自动处理不同操作系统的

array_walk()使用

bool  array_walk (  array &$array ,  callable $callback [,  mixed $userdata = NULL ] ) 将用户自定义函数 funcname 应用到 array 数组中的每个单元。 array_walk() 不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。 array

颠覆多跳事实验证!Causal Walk 前门调整技术引领去偏新纪元

Causal Walk: Debiasing Multi-Hop Fact Verifcation with Front-Door Adjustment 论文地址: Causal Walk: Debiasing Multi-Hop Fact Verification with Front-Door Adjustment| Proceedings of the AAAI Conference

python-小知识点 --- 使用os.walk()遍历目录文件,文件按序号统一重命名

os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情 语法: os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]]) 参数 top – 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。 root 所指的是当前正在遍历的这个文件夹的本

Deep Forest,非神经网络的深度模型

欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。  深度学习最大的贡献,个人认为就是表征学习(representation learning),通过端到端的训练,发现更好的features,而后面用于分类(或其他任务)的输出function,往往也只是普通的softmax(或者其他一些经典而又简单的方法)而已,所以,只要特征足够好,分类

hdu3987 Harry Potter and the Forbidden Forest 最小割割边最少

题意:给一个n个点构成的有向图,起点为0,终点为n-1。每条边有一个权值,删除一条边的代价为边权。问如何删除使得0和n-1不 联通且代价最小,在这种情况下至少要删除多少条边。 思路:首先保证代价最小,很容易想到是最小割,但是不知怎么保证割边最少= =看了大神博客。。恍然大悟。。模型真是见得 少。。我们设一个较大的值N(N>数据给的最大边数),将边权变成w*N+1,那么最后求得的最大流对N取