博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA10917 A walk trough the Forest (最短路,dp)
阅读量:7033 次
发布时间:2019-06-28

本文共 1630 字,大约阅读时间需要 5 分钟。

求出家到其他点的最短路径,题目的条件变成了u->v不是回头路等价于d[u]>d[v]。

然后根据这个条件建DAG图,跑dp统计方案数,dp[u] = sum(dp[v])。

#include
using namespace std;const int maxn = 1001, maxm = 2002;struct Edge{ int v,w,nxt;};#define PB push_backvector
edges;vector
G[maxn];int head[maxn];int d[maxn];void addEdge(int u,int v,int w){ edges.PB({v,w,head[u]}); head[u] = edges.size()-1;}void init(){ memset(head,-1,sizeof(head)); edges.clear();}typedef pair
Node;#define fi first#define se secondvoid dijkstra(int s = 1){ memset(d,0x3f,sizeof(d)); priority_queue
,greater
> q; q.push(Node(d[s] = 0,s)); while(q.size()){ Node x = q.top(); q.pop(); int u = x.se; if(x.fi != d[u]) continue; for(int i = head[u]; ~i ; i = edges[i].nxt){ Edge &e = edges[i]; if(d[e.v] > d[u]+e.w){ d[e.v] = d[u]+e.w; q.push(Node(d[e.v],e.v)); } } }}int dp[maxn];int dfs(int u){ int &ans = dp[u]; if(~ans) return ans; if(u == 1) return ans = 1; ans = 0; for(int i = 0; i < (int)G[u].size(); i++){ ans += dfs(G[u][i]); } return ans;}void rebuild(int n){ for(int i = 0; i < n; i++) G[i].clear(); for(int u = 0; u < n; u++){ for(int i = head[u]; ~i; i = edges[i].nxt){ int v = edges[i].v; if(d[v] < d[u]) G[u].PB(v); } }}int main(){ //freopen("in.txt","r",stdin); int n,m; while(scanf("%d%d",&n,&m),n){ init(); while(m--){ int u,v,w; scanf("%d%d%d",&u,&v,&w); u--;v--; addEdge(u,v,w); addEdge(v,u,w); } dijkstra(); rebuild(n); memset(dp,-1,sizeof(dp)); printf("%d\n",dfs(0)); } return 0;}

 

转载于:https://www.cnblogs.com/jerryRey/p/4779264.html

你可能感兴趣的文章
从今天起让我们忘记Java中的get/set方法吧!
查看>>
java框架学习日志-3
查看>>
Oracle学习日志-6(聚合查询)
查看>>
程序员笔记|循序渐进解读Oracle AWR性能分析报告
查看>>
UniDAC使用教程(一):连接到数据库
查看>>
PHP 连接 MySQL
查看>>
314安装与网络配置预习+笔记
查看>>
python项目实战:免费下载kugou任意付费音乐
查看>>
消息中间件-activeMQ
查看>>
SQL SERVER2008数据库常识
查看>>
mac outlook 自动回复
查看>>
横屏竖屏
查看>>
Zabbix监控MySQL
查看>>
OSChina 周三乱弹 ——祖传的程序员?????
查看>>
OSChina 周五乱弹 —— 埃塞俄比亚的远房大表姐
查看>>
大华设备扫描工具
查看>>
twisted的异步库汇总-- mysql,redis,mongo,zmq,sockjs等
查看>>
Python3 基于asyncio的新闻爬虫思路
查看>>
af3.0学习使用和理解
查看>>
Linux vmstat命令实战详解
查看>>