【复习】搜索

Cleaning Robot

数独游戏

城市距离

Bloxorz I

部落卫队

Weather Forecast

生日蛋糕

Best Sequence

Children of the Candy Corn

Description

给出一张 n 个点 m 条边的有向图。对于每条边 (a,b),如果之前经过 c 点,那么费用为 p,否则为 r。求 1n 的最小费用。如果无法到达则输出 "impossible"。

Solution

其实这是一道最短路的变形,但是由于 n 的范围很小,可以直接搜索(DFS),而且每条边可以走多次,我们只需加以限制即可。

Code

#include <cstdio>
const int MAXN = 15, INF = 1e9;
int n, m, ans;
int a[MAXN], b[MAXN], c[MAXN], p[MAXN], r[MAXN];
int vis[MAXN];
void dfs(int k, int now) {
	if (now >= ans)
		return ;
	if (k == n) {
		ans = now;
		return ;
	}
	for (int i = 1; i <= m; i++) {
		if (a[i] == k) {
			if (vis[b[i]] >= 3)
				continue;
			vis[b[i]]++;
			if (b[i] == c[i] && vis[b[i]] == 1)
				dfs(b[i], now + r[i]);
			else
				dfs(b[i], now + (vis[c[i]] ? p[i] : r[i]));
			vis[b[i]]--;
		}
	}
}
int main() {
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= m; i++)
		scanf("%d %d %d %d %d", &a[i], &b[i], &c[i], &p[i], &r[i]);
	vis[1] = 1;
	ans = INF;
	dfs(1, 0);
	if (ans == INF)
		return printf("impossible"), 0;
	printf("%d", ans);
	return 0;
}
posted @   zhou_ziyi  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示