Problem B: Graph

Time Limit: 2 Sec  Memory Limit:
128 MB

Submit: 1  Solved: 1

[

cid=1000&pid=1&langmask=16">Submit][

id=1010">Status][Web
Board
]

Description

There are n vertexs and m directed edges. Every vertex has a lowercase letters .Now, ZZT stand at 1.

he want to go to n to find ZZ.But ZZT dont like  character strings "cnm" ,"tmd","nsb". so  he won't walk such a continuous


3 vertex,the first vertex is 'c' second vertex is 'n'  last vertex is 'm'; He wanted to find her as soon as possible.

Input

The first line in the input will contain the number of cases ,Each case begins with two integer n,m(2<=n<=100,m<=1000)

then follow a line contain a character string "a1a2a3a4a5...an" ai is the i vertex's lowercase letter.

then follow m line ,each line contain li,ri,ci , a edge connect li and ri   cost time ci(1<=li,r1<=n,1<=ci<=100);

Output

for each case ,output a integer express the minimum time, if can't find ZZ output "-1"(without quotes);

Sample Input

1
4 4
cnmc
1 2 1
2 3 1
1 3 4
3 4 1

Sample Output

5

题意:给你一个n个点m条边的有向图,每个点都有一个小写字母。

如今ZZT站在点1。ZZ站在点n。ZZT想用最短的路程走到ZZ的地方。可是呢,ZZT不希望走过这种连续的三点:cnm,tmd,nsb。如今问你他是否能到达ZZ所在地。

若能,输出最短路径,否则输出-1。

分析:此题关键在于怎样构图。

我们能够把边当点来使用,那么总共同拥有m个点。

增加一个源点0连向以点1发出去的边,增加一个汇点m+1使得点全部指向点n的边连向点m+1,那么原题就变成了从点0開始到达点m+1的最短路径。构图时,当两条边(u,v)。(x,y)中 v == x 而且(str[u],str[v],str[y]) !=(c,n,m),(t,m,d),(n,s,b),则可连接。

构图完成。跑一遍最短路就可以。

题目链接:http://192.168.4.140/problem.php?

cid=1000&pid=1

代码清单:

#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<stack>
#include<ctime>
#include<cctype>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull; const int maxn = 100 + 5;
const int maxv = 1000 + 5;
const int max_dis=0x7f7f7f7f; struct Edge{
int to;
int dis;
Edge(){}
Edge(int to,int dis){
this -> to = to;
this -> dis = dis;
}
}; struct E{ int u,v,dis; }edge[maxv]; int T;
int n,m;
int a,b,c;
bool vis[maxv];
int dist[maxv];
char str[maxn];
vector<Edge>graph[maxv]; void init(){
for(int i=0;i<maxv;i++) graph[i].clear();
} void input(){
scanf("%d%d%s",&n,&m,str);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].dis);
}
} bool judge(int pre,int now,int to){
if(str[pre]=='c'&&str[now]=='n'&&str[to]=='m') return true;
if(str[pre]=='t'&&str[now]=='m'&&str[to]=='d') return true;
if(str[pre]=='n'&&str[now]=='s'&&str[to]=='b') return true;
return false;
} void createGraph(){
for(int i=1;i<=m;i++){
if(edge[i].u==1) graph[0].push_back(Edge(i,edge[i].dis));
if(edge[i].v==n) graph[i].push_back(Edge(m+1,0));
for(int j=1;j<=m;j++){
if(i==j) continue;
if(edge[i].v==edge[j].u){
if(judge(edge[i].u-1,edge[i].v-1,edge[j].v-1))
continue;
graph[i].push_back(Edge(j,edge[j].dis));
}
}
}
} int spfa(){
memset(vis,false,sizeof(vis));
memset(dist,max_dis,sizeof(dist));
queue<int>q;
while(!q.empty()) q.pop();
vis[0]=true; dist[0]=0;
q.push(0);
while(!q.empty()){
int u=q.front(); q.pop();
vis[u]=false;
for(int i=0;i<graph[u].size();i++){
int v=graph[u][i].to;
int d=graph[u][i].dis;
if(dist[v]>dist[u]+d){
dist[v]=dist[u]+d;
if(!vis[v]){
vis[v]=true;
q.push(v);
}
}
}
}
if(dist[m+1]==max_dis) return -1;
return dist[m+1];
} void solve(){
createGraph();
printf("%d\n",spfa());
} int main(){
// freopen("cin.txt","r",stdin);
// freopen("cout.txt","w",stdout);
scanf("%d",&T);
while(T--){
init();
input();
solve();
}return 0;
}

GBX的Graph(最短路)的更多相关文章

  1. Codeforces 715B. Complete The Graph 最短路,Dijkstra,构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF715B.html 题解 接下来说的“边”都指代“边权未知的边”. 将所有边都设为 L+1,如果dis(S,T ...

  2. 2018牛客网暑假ACM多校训练赛(第十场)F Rikka with Line Graph 最短路 Floyd

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-F.html 题目传送门 - https://www.n ...

  3. HDU-4725 The Shortest Path in Nya Graph 最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 如果直接建图复杂度过大,但是考虑到每层之间的有效边很少,只要在每层增加两个虚拟节点n+i和2*n ...

  4. HDU 5876 Sparse Graph BFS 最短路

    Sparse Graph Problem Description   In graph theory, the complement of a graph G is a graph H on the ...

  5. Codeforces 715B & 716D Complete The Graph 【最短路】 (Codeforces Round #372 (Div. 2))

    B. Complete The Graph time limit per test 4 seconds memory limit per test 256 megabytes input standa ...

  6. HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)To ...

  7. CSU1659: Graph Center(最短路)

    Description The center of a graph is the set of all vertices of minimum eccentricity, that is, the s ...

  8. HDU 4725 The Shortest Path in Nya Graph (最短路)

    The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  9. HDU - 5876 :Sparse Graph (完全图的补图的最短路 -BFS&set)

    In graph theory, the complement of a graph G is a graph H on the same vertices such that two distinc ...

随机推荐

  1. caioj 1078 动态规划入门(非常规DP2:不重叠线段)(状态定义问题)

    我一开始想的是前i个区间的最大值 显然对于当前的区间,有不选和选两种情况 如果不选的话,就继承f[i-1] 如果选的话,找离当前区间最近的区间取最优 f[i] = max(f[i-1, f[j] + ...

  2. CSU 1374 Restore Calculation 数位DP

    题意: 给你三个数A, B, C(没有前导0),但是其中某些位不知道. 问A+B=C成立有多少种情况. 思路: 从最后一位往前推,枚举A, B的每一种情况,考虑进位和不进位两种情况. 代码: #inc ...

  3. 二、 HBase核心功能模块。

      Hadoop 框架包含两个核心组件: HDFS 和 MapReduce 其中     HDFS                是文件存储系统,负责数据存储:     MapReduce     是 ...

  4. 基于express+redis高速实现实时在线用户数统计

    作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样基于express+redis高速实现实时在线用户数统计. 1. 在github.com上创建项目uv-tj.将其同步到本地: ...

  5. vue30-单一事件管理组件通信: vuex

    ------------------------------------------------------ 可以单一事件管理组件通信: vuex var Event=new Vue(); Event ...

  6. thinkphp里面使用原生php

    thinkphp里面使用原生php Php代码可以和标签在模板文件中混合使用,可以在模板文件里面书写任意的PHP语句代码 ,包括下面两种方式: 使用php标签 例如: {php}echo 'Hello ...

  7. Quart 学习

    quartz版本使用2.2.1 梳理一下其中的流程,可以表示为: 0.调度器线程run() 1.获取待触发trigger 1.1数据库LOCKS表TRIGGER_ACCESS行加锁 1.2读取JobD ...

  8. HTTP 各种特性应用(二)

    一.Cookie 通过 Set-Cookie 设置. 下次浏览器请求就会带上. 键值对,可以设置多个. Cookie 属性 max-age 和 expires 设置过期时间 Secure 只在 htt ...

  9. 用json2.js 代替 json.js防止与jQuery的js冲突

    用json2.js 代替 json.js防止与jQuery的js冲突 1 s.toJSONString json.js:259 2 Object.toJSONString json.js:158 3 ...

  10. js生成验证码并验证的登录页面

    <!Doctype html> <html> <head> <meta charset="utf-8"/> <title> ...