首页 > 其他分享 >题解:SP4555 ANARC08F - Einbahnstrasse

题解:SP4555 ANARC08F - Einbahnstrasse

时间:2024-10-02 17:34:30浏览次数:6  
标签:Einbahnstrasse SP4555 MAT int 题解 cost ct

一道多源最短路问题,肯定用 Floyd,还有个问题就是怎么处理输入。

使用 sscanf(edge+2,"%d",&cost); 从 edge 的第三个字符开始读取边权,然后处理左右两侧的箭头即可。

#include<bits/stdc++.h>
using namespace std;

map<string,int>cn;
int ct;
int q[1028];
int add_city(const char *name){
	int &x=cn[name];
	if(!x)x=ct++;
	return x;
}
int main(){
	int N,C,R;
	int MAT[121][121];
	int t=1;
	while(114514<1919810){
		scanf("%d%d%d",&N,&C,&R);
		if(!N) break;
		int i,j;
		cn.clear();
		memset(MAT,0x3f,sizeof MAT); 
		ct=1;
		char Garage[11];
		char CarLoc[1010][12];
		cn[Garage]=ct;
		ct++;
		++C;
		char c1[11],c2[11],edge[11];
		for(i=0;i<C;i++){
			scanf("%s",c1);
			q[i]=add_city(c1);
		}
		int cost;
		int a,b;
		for(i=0;i<R;i++){
			scanf("%s%s%s",c1,edge,c2);
			sscanf(edge+2,"%d",&cost);
			a=add_city(c1);
			b=add_city(c2);
			int len=strlen(edge);
			if(edge[0]=='<')
				MAT[b][a]=min(cost,MAT[b][a]);
			if(edge[len-1]=='>')
				MAT[a][b]=min(cost,MAT[a][b]);
		}
		int k;
		for(k=1;k<ct;k++)
			for(i=1;i<ct;i++)
				for(j=1;j<ct;j++)
					if(MAT[i][k]+MAT[k][j]<MAT[i][j])
						MAT[i][j]=MAT[i][k]+MAT[k][j];
		int ans=0,origin=q[0];
		for(i=1;i<C;i++)
			ans=ans+MAT[origin][q[i]]+MAT[q[i]][origin];
		printf("%d. %d\n",t,ans);
		t++;
	}
	return 0;
}

标签:Einbahnstrasse,SP4555,MAT,int,题解,cost,ct
From: https://www.cnblogs.com/cly312/p/18444909

相关文章

  • 题解2:SP5449 ANARC09A - Seinfeld
    思路:考虑贪心。统计未配对的{:当遇到一个{时,增加未配对的{数量。当遇到一个}时,有两种情况:如果有多余的{,那么就用这个}与之前的{配对。如果没有多余的{,增加\(1\)次。遍历结束后:当我们遍历完字符串后,可能还会剩下一些未配对的{,需要通过将一部分{......
  • 题解:SP5449 ANARC09A - Seinfeld
    可以用动态规划解决。动态规划思想:设\(dp_{i,j}\)表示处理到字符串的第\(i\)个字符,并且未配对的{数量为\(j\)时,所需的最小操作次数。状态转移:初始化:\(dp_{0,0}=0\):表示空字符串且没有未配对的{,显然不需要任何操作。其他所有\(dp_{0,j}\)初始化为INF,表示不......
  • 题解:SP1703 ACMAKER - ACM (ACronymMaker)
    题目大意:一个有一些单词组成的短语,给定一个缩写词,求此缩写由此短语的单词组成的可能方案数。注意,短语中所有重要的单词都要用到,顺序必须和缩写词单词顺序一致。思路动态规划设置:\(dp_{i,j}\):使用前\(i\)个重要单词形成前\(j\)个缩写字符的方法数。\(dp2_{k,m}\):辅助数组......
  • 题解:SP4557 ANARC08H - Musical Chairs
    约瑟夫问题,由于问题涉及大量的删除和查找操作,直接用数组模拟会超时,可以用树状数组题意在每一轮游戏中,我们需要从当前的孩子位置开始数数,并淘汰第\(D\)个孩子。游戏需要不断地从剩下的孩子中进行选择并淘汰,直到只剩下最后一个孩子。注意两个点将树状数组的位置设为\(1\)......
  • 59_初识搜索引擎_搜索相关参数梳理以及bouncing results问题解决方案
    1、preference决定了哪些shard会被用来执行搜索操作_primary,_primary_first,_local,_only_node:xyz,_prefer_node:xyz,_shards:2,3bouncingresults问题,两个document排序,field值相同;不同的shard上,可能排序不同;每次请求轮询打到不同的replicashard上;每次页面上看到的搜索......
  • 操作系统错题解析【软考】
    目录前言1.特殊的操作系统1.1可移植性1.2嵌入式操作系统2.进程的状态2.1调度方式2.2进程通信运行实例3.信号量的取值范围3.1PV操作中信号量分析4.信号量于PV操作4.1PV操作4.2初值5.死锁资源数计算6.进程资源图7.页式存储8.段页式存储9.磁盘管理9.1计算读取时间9.2......
  • 01 交换串 题解
    题意简述给定一个长为\(n\)的\(\tt01\)串\(s\),你需要对\(s\)进行恰好\(m\)次交换,每次只能交换相邻的不同字符,最大化操作后\(s\)的价值。\(s\)的价值被定义为,对于每一个\(i\),记\(1\simi-1\)中,和\(s_i\)不同的\(s_j\)有\(l\)个,\(r\)同理,\(f(s_i,i,l,......
  • CSP-S/NOIP提高组 真题题解总结
    DP:线性dpP1091[NOIP2004提高组]合唱队形比较简单的一道题。求出以\(i\)结尾的最长上升子序列和以\(i\)为头的最长下降子序列,相加\(-1\)即可。P1052[NOIP2005提高组]过河如果不考虑\(L\)的范围,那么就是一道简单的线性dp。但是\(L\)很大,石头数量很少,......
  • 区间 题解
    题意简述求长度为\(n\)的序列\(a\)的最长连续子序列\([l,r]\),满足\(\existsi\in[l,r],\gcd(a_l,\ldots,a_r)=a_i\)。\(1\leqn\leq4\times10^6\),\(1\leqa_i\leq10^{18}\)。题目分析根据\(\gcd(a,b)=a\)等价于\(b\bmoda=0\),这个区间的限......
  • 题解 P2726 【[SHOI2005]树的双中心】
    首先,我们会有一个很简单的想法,枚举断边,产生两棵子树,然后在两棵树内分别求带权重心,计算贡献,这样的话复杂度是\(O(n^2)\)的。那么我们要好好利用$h\leq100$的性质。考虑\(sze[u]\)为带权重量,\(g[u]\)为以\(u\)为根的树,所有点都到\(u\)的代价。所以\(g[u]=\sum\l......