Age of Moyu (2018 Multi-University Training Contest 7)

题目链接

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 inline ll read(){
 5     int x=0,f=1;char ch=getchar();
 6     while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘)f=-1;ch=getchar();}
 7     while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
 8     return x*f;
 9 }
10
11 /***********************************************************/
12
13 const int maxn = 100010;
14 int n, m;
15 int dis[maxn], head[maxn], look[maxn];
16 queue<int>q;
17 int ans, cas;
18
19 struct Edge
20 {
21     int u, v, w, next, vis;
22 }edge[maxn*4];
23
24 void add_edge(int u, int v, int w){
25     edge[cas].u = u; edge[cas].v = v; edge[cas].w = w;
26     edge[cas].next = head[u]; edge[cas].vis = 0;
27     head[u] = cas++;
28 }
29
30 void dfs(int rt, int cl, int num){
31     if(rt == n) {
32         ans = num;
33         return;
34     }
35     if(!look[rt]){
36         look[rt] = 1;
37         dis[rt] = num;
38         q.push(rt);
39     }
40     for(int i = head[rt];i != -1;i = edge[i].next){
41         if(edge[i].vis) continue;
42         if(edge[i].w == cl){
43             edge[i].vis = 1;
44             dfs(edge[i].v, cl, num);
45         }
46     }
47     return;
48 }
49
50 int bfs(){
51     while(!q.empty()) q.pop();
52     q.push(1);            //从一开始走
53     dis[1] = 0;
54     look[1] = 1;
55     while(!q.empty()){
56         int now = q.front(); q.pop();
57         for(int i = head[now];i != -1;i = edge[i].next){
58             if(edge[i].vis) continue;    //每条边只走一次
59             int v = edge[i].v;
60             edge[i].vis = 1;
61             dfs(v, edge[i].w, dis[now]+1);    //把所有与当前路径相同权值的路径加入
62             if(ans > 0) break;
63         }
64         if(ans > 0) break;
65     }
66     return ans;
67 }
68
69 void init(){
70     cas = 0;
71     memset(head, -1, sizeof(head));
72     memset(look, 0, sizeof(look));
73     memset(dis, 0x7f, sizeof(dis));
74 }
75
76 int main(){
77     while(~scanf("%d%d", &n, &m)){
78         init();
79         for(int i = 1;i <= m;i++){
80             int u, v, w;
81             u = read(); v = read(); w = read();
82             add_edge(u, v, w);
83             add_edge(v, u, w);
84         }
85         ans = -1;
86         ans = bfs();
87         printf("%d\n", ans);
88     }
89     return 0;
90 }

原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/9831691.html

时间: 2024-11-02 05:15:53

Age of Moyu (2018 Multi-University Training Contest 7)的相关文章

HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description Alice and Bob are playing together. Alice is crazy about art and she has visited many museums around the world. She has

HDU 4906 Our happy ending(2014 Multi-University Training Contest 4)

题意:构造出n个数 这n个数取值范围0-L,这n个数中存在取一些数之和等于k,则这样称为一种方法.给定n,k,L,求方案数. 思路:装压 每位 第1为表示这种方案能不能构成1(1表示能0表示不能)  第2为表示能不能构成2 ...  这样用d[1<<n] 的DP  像背包那样背 n次就可以 最后状态中第k位为1的就可以加上方法数. #include<cstring> #include<cstdio> #include<cmath> #include <

HDU 4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

题意:给定n*m个格子,每个格子能填0-k 的整数.然后给出每列之和和每行之和,问有没有解,有的话是不是唯一解,是唯一解输出方案. 思路:网络流,一共 n+m+2个点   源点 到行连流量为 所给的 当前行之和.    每行 连到每一列 一条流量为  k的边,每列到汇点连 列和.如果流量等于总和则有解,反之无解(如果列总和不等于行总和也无解).  判断方案是否唯一 找残留网络是否存在长度大于2的环即可,有环说明不唯一. #include<cstdio> #include<cstring&

(2018 Multi-University Training Contest 3)Problem L. Visual Cube

//题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6330//题目大意:按照一定格式画出一个 a×b×c 的长方体.  //解题思路:计算画布大小以及各个关键位置的坐标.按照格式将画布填充正确.逐步覆盖就对了,csy说这是全场最简单的题!虽然我们是第三个做的~ 1 #include <bits/stdc++.h> 2 using namespace std; 3 char s[100][100]; 4 int main() 5 { 6 int T

hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3)

1 #include <stdio.h> 2 #include <iostream> 3 #include <cstdlib> 4 #include <cmath> 5 #include <string> 6 #include <cstring> 7 #include <algorithm> 8 #include <stack> 9 #include <queue> 10 #include <

AV-TEST杀毒软件能力测试(2018年1月-12月)杀毒软件排名

2018年1月到12月,AV-TEST攻击了实验室中无数的Windows系统,在830多项单独测试中测试了7种杀毒软件和5种快捷工具. 1.测试概述 在长期测试中,实验室在各种实际场景中测试了杀毒软件和快速清理工具: 在第一次测试期间,在(单次)攻击后安装保护包并进行了测试,以确定杀毒软件是否可以清除所有病毒文件. 在第二次测试中,安装了一个保护软件并暂时停用.之后,实验室记录了一种恶意软件并进行了处理.最后,重新激活保护软件,此过程验证恶意软件最初未被识别并随后被检测到的情况. 在使用特殊工具

CentOSLinux 学习第三台(2018年6月6日)

安装ifconfig 命令方式yum -y install net-toos运行这个命令就安装了安装完Putty,后,设置Putty秘钥putty 秘钥设置,在安装putty的压缩包里有一个putty证,执行文件(PUTTYGEN),打开后点击:Generate 这个时候就会生出秘钥公钥,这个秘钥是获取随机字符串的,你只要动鼠标就会自动获取字符串做为秘钥 mkdir /root/.ssh 在/root/目录下创建一个.ssh目录chmod 700 /root/.ssh 修改.ssh目录的权限vi

Linux CentOS 学习第4天(2018年6月7日)

一.单用户模式(忘记管理员密码的时候怎么办?)重启命令:rebootinit 6shutdown -r now关机命令init 0poweroff1.重启机器出现以下界面的时候,按键盘上的方向键(上或下键)选择下面的选项CentOS Linux (3.10.0-862.e17.x86_65) 7 (Core)后点击键盘上的字母"e"键,出现以下窗口将红色标注的:ro修改成 rw init=/sysroot/bin/sh修改好之后按键盘上的Ctrl和x键,之后会重启出现以下界面进入这个界

Linux CentOS学习第5天(2018年6月8日)

一.系统目录结构ls 查看目录命令ls /root/查看root目录下的目录命令useradd user添加user1普通用户命令,这个命令创建的用户文件存放在/home/下面tree命令安装yum install -y tree安装tree命令tree /显示/根目录结构tree --hep 显示tree常用项目命令man命令显示文件帮助man tree 命令显示tree命令的用法tree -L 2 /显示根目录下的最大为2级的目录PATH环境变量/sbin目录下面的命令是root超级用户使用