SGU 226.Colored graph

时间限制:0.25s

空间限制:4M

题意:

给出一个n个节点,m条边的图,每条边都有标记了编号为1,2,3三种颜色之一,现在求从1号节点到n号节点的一条最短路径的长度,要求该路径中相邻的边没有相同的颜色。



Solution:

有限制条件的SPFA,要注意有时要形成环来改变路径颜色,才能到达目标点。

参考代码

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#define INF 300
using namespace std;
struct node {
	int v, ne, c;
} edge[INF * INF];
queue<int> ql;
int head[INF], pd[INF];
int dis[INF][4], cnt,n,m;
void added (int u, int v, int c) {
	edge[++cnt].v = v, edge[cnt].c = c;
	edge[cnt].ne = head[u];
	head[u] = cnt;
}
void spfa() {
	while (!ql.empty() ) {
		int x = ql.front();
		pd[x] = 0,ql.pop();
		for (int i = head[x]; i != 0; i = edge[i].ne) {
			int j = edge[i].v, color = edge[i].c;
			for (int k = 1; k <= 3; k++) {
				if (k == color || dis[x][k] == -1) continue;
				if (dis[j][color] == -1 || dis[j][color] > dis[x][k] + 1) {
					dis[j][color] = dis[x][k] + 1;
					if (!pd[j])
						pd[j] = 1, ql.push (j);
				}
			}
		}
	}
}
int main() {
	int  x, y, c;
	scanf ("%d %d", &n, &m);
	memset (dis, -1, sizeof dis);
	for (int i = 1; i <= m; i++) {
		scanf ("%d%d%d", &x, &y, &c);
		added (x, y, c);
	}
	ql.push (1); pd[1] = 1;
	dis[1][1] = dis[1][2] = dis[1][3] = 0;
	spfa();
	int ans = INF<<12;
	for (int i = 1; i <= 3; i++)
		if (dis[n][i] != -1)
			ans = min (ans, dis[n][i]);
	if (ans != INF<<12) printf ("%d", ans);
	else
		puts ("-1");
	return 0;
}

  

SGU 226.Colored graph

时间: 2024-10-11 10:43:05

SGU 226.Colored graph的相关文章

SGU 226

题目大意:给出一张图,每条边都有一个颜色,求1到n的最短路,要求路径上不能有两相邻边颜色相同. 题解:本来写了个裸SPFA,WAon5看了讨论区的数据才知道不能直接判断边的颜色然后跑SPFA,应该设d[n][k]表示第n个点,由第k个颜色过来的最短路,也就是加一维跑SPFA.给我的感觉是:做不出就加一维. %%%__debug大神. #include<cstdio> #include<cstdlib> #include<algorithm> #include<io

2017icpc乌鲁木齐网络赛Colored Graph (构造)

题目 https://nanti.jisuanke.com/t/16958 题意 给定一个n(n<=500)个点的无向图,给每条边黑白染色,输出同色三角形最少的个数和对应的方案 分析 首先考虑给定一个染色完毕的无向图,如何求同色三角形的个数 同色三角形的个数=总的个数-异色三角形的个数 而一个异色三角形对应两个异色角,所以我们可以通过算异色角的个数来计算异色三角形的个数 而异色角是有一个固定的点i引出去的n-1条边所决定的 设某个点i有$x_i$条1边,有$n-1-x_i$条2边 可以发现异色角

SGU 220~229

SB题一堆,以后为了提高效率,SB题,一眼题一律不码. 220 Little Bishops 题意:求n*n的棋盘上放K个象的放法, 象可以对角线相互攻击 sb题. 221 Big Bishops 如上,一字未变,加个高精度即可,尼玛我现在高精度都能写错,还是滚回pj吧.. 222. Little Rooks 题意:n*n放车,问方案数.n最大10. 尼玛,真的滚回pj组了!?老子还是读过书的. 223 Little King 题意:如上,把车改成王. 状压直接上. 224. Little Qu

深入浅出Zabbix 3.0 -- 第二章 Zabbix Web操作与定义

第二章  Zabbix Web操作与定义 本章介绍Zabbix 中一些基本概念的定义和web前端页面的操作,包括Zabbix中使用的一些术语的定义,Web页面中用户管理.主机和主机组的管理,以及监控项.模板.触发器.告警的管理和操作,还有Graphs.Screens.Maps及Reports等.通过本章的学习掌握一些基本概念并能够通过Web页面的操作完成对Zabbix的管理. 2.1 定义 hosts(主机) Zabbix中需要监控的服务器.交换机及其他设备我们都统一称作host,这些设备与Za

Graph Theory Algorithms

1 /** 2 * 图论 3 **/ 4 5 /***************************** 图的抽象数据类型 ************************************/ 6 ADT Graph 7 { 8 数据: 9 Graph = (Vertex, Edge)是可以用不同方式存储的图,Vertex是顶点集, 10 Edge = {<vertex_1, vertex_2> | vertex_1, vertex_2属于Vertex,vertex_1不等于verte

zabbix利用api批量添加item,并且批量配置添加graph

关于zabbix的API见,zabbixAPI 1item批量添加 我是根据我这边的具体情况来做的,本来想在模板里面添加item,但是看了看API不支持,只是支持在host里面添加,所以我先在一个host里面添加,然后在将item全部移动到模板里. 具体步骤就不说了,直接上代码: 为了快速完成,代码写的有点乱,也没怎么处理异常,算是第一版吧,有时间在优化  1 #!/usr/bin/env python 2 #-*- coding: utf-8 -*- 3 4 import json 5 imp

[email&#160;protected] Check whether a given graph is Bipartite or not

Check whether a given graph is Bipartite or not A Bipartite Graph is a graph whose vertices can be divided into two independent sets, U and V such that every edge (u, v) either connects a vertex from U to V or a vertex from V to U. In other words, fo

POJ1419 Graph Coloring(最大独立集)(最大团)

Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4926   Accepted: 2289   Special Judge Description You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the

UVA Graph Coloring

主题如以下: Graph Coloring  You are to write a program that tries to find an optimal coloring for agiven graph. Colors are applied to the nodes of the graph and the only availablecolors are black and white. The coloring of the graph is called optimalif a