首页 > 其他分享 >T292306 01最短路 题解

T292306 01最短路 题解

时间:2022-11-16 21:04:24浏览次数:54  
标签:dl T292306 int 题解 ch read 01 ans for1

又是一个找不到题目所以自己写的题。。。

40 迪杰斯特拉,但是搞不懂为什么是wa而不是re的

#include<bits/stdc++.h>
#define for1(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
#define mp(a,b) make_pair(a,b);
using namespace std;
int main()
{
	//freopen("9.in","w",stdout);
	srand(time(0));
	int n,m;
	n=10;
	m=10;
	cout<<n<<' '<<m<<endl;
	for1(i,1,m-1)
	{
		int x,y,z;
		x=	1 + (int)n * rand() / (RAND_MAX + 1); 
		y=	1 + (int)n * rand() / (RAND_MAX + 1);
		while(x==y)  y=	1 + (int)n * rand() / (RAND_MAX + 1);
		z=rand()%2;
		cout<<x<<' '<<y<<' '<<z<<endl;
	}
			int x,y,z;
		x=	1;
		y=	1 + (int)n * rand() / (RAND_MAX + 1);
		while(x==y)  y=	1 + (int)n * rand() / (RAND_MAX + 1);
		z=rand()%2;
		cout<<x<<' '<<y<<' '<<z<<endl;
} 

100

#include<bits/stdc++.h>
#define for1(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
#define mp(a,b) make_pair(a,b);
using namespace std;
struct node{
	int w;
	int nex;
	int to;
}a[1000005*3];
int hd[1000005],cnt,ans[1000005];
int n,m,s,t;
bool vis[500005];
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}

void ru(int x,int y,int z)
{
	a[++cnt].to=y;
	a[cnt].w=z;
	a[cnt].nex=hd[x];
	hd[x]=cnt;
}

void bfs()
{
	deque <int > dl;
	for1(i,1,n) ans[i]=1e8;
	ans[s]=0;
	dl.push_front(s);
	while(!dl.empty())
	{
		int x=dl.front();
		dl.pop_front();
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=hd[x];i;i=a[i].nex)
		{
			int v=a[i].to;
			if(ans[v]>ans[x]+a[i].w)
			{
				ans[v]=ans[x]+a[i].w;
				if(a[i].w==1) dl.push_back(v);
				else dl.push_front(v);
			}
		}
	}
}
int main()
{
// 	freopen("9.in","r",stdin);
// 	freopen("9.out","w",stdout);
	n=read(),m=read();
	s=1;
	for1(i,1,m)
	{
		int x,y,z;
		x=read(),y=read(),z=read();
		ru(x,y,z);
		ru(y,x,z);
	}
	bfs();
	for1(i,1,n) 
	if(ans[i]==1e8) printf("%d ",-1);
	else printf("%d ",ans[i]);
} 

标签:dl,T292306,int,题解,ch,read,01,ans,for1
From: https://www.cnblogs.com/yyx525jia/p/16897464.html

相关文章

  • P8304 01 串 Sol
    先考虑\([1,n]\)的答案。猜结论。将\(a_i=0\)视为\(-1\),做前缀和,每一次\(<0\)就意味着删掉一个\(0\)。再做一遍后缀和,执行同样的操作。最后的答案就是区间长度......
  • 223201062524赵中垚-软件工程基础Y- 实验二 结对项目报告
    沈阳航空航天大学软件工程基础实验报告实验名称:实验二实验题目:结对项目专业软件工程学号223201062524姓名赵中垚袁显利指导教师孟桂英成......
  • leetcode 101 对称二叉树
    题目 给定一个二叉树,检查它是否是镜像对称的。方法一递归:classTreeNode:def__init__(self,x):self.val=xself.left=Noneself.right......
  • 紫罗兰题解
    题意概述给定一张\(n\)个顶点\(m\)条边的无向图,顶点的编号在\(1\simn\)内,第\(i\)条无向边连接着顶点\(x_i\)与\(y_i\)。我们称顶点\(v_0,v_2,\cdots,v_{k......
  • 2022-01-27 redis集群技术调研
    目录​​摘要:​​​​redis集群方案选型:​​​​redis集群前端代理proxy技术选型:​​​​redis集群的扩容/缩容:​​​​rediscluster集群的节点高可用​​​​redis节......
  • DTOJ 2022-11-15 测试 题解
    测试成果100+100+50+10=260还行吧(虽然T2做法很迷惑)A惊鸿(grace)DTOJP6367题面大意给定一个\(n\)行\(m\)列的仅包含小写字母的矩阵\(A\)。求从\((1,1)\)......
  • 长春花题解
    题意概述给定一个素数\(p\),对每个\(0\lex<p\),设\(f(x)\)表示一个最小的非负整数\(a\),使得存在一个非负整数\(b\),满足\((a^2+b^2)\bmodp=x\)。现在,你想要......
  • 2018年辽宁省电子设计大赛D题手势识别装置
    一转眼,两年过去了。距离这个比赛已经好久。我此时(2020年5月28日)已然大四,马上要念研究生了。现在回头看这篇我刚开始接触写的文章,还没有学会markdown,而且认识也比较粗浅。大......
  • [oeasy]python0015_十六进制_hexadecimal_字节形态_hex函数
    十六进制(hexadecimal)回忆上次内容上次数制可以转化bin(n)可以把数字转化为​​2进制​​binary接收一个整数(int)得到一个二进制数形式的字符串数字在计算机中是用二进......
  • LeetCode 题解 1922. 统计好数字的数目
    1922.统计好数字的数目-力扣(Leetcode)题解思路一:快速幂#defineMOD1000000007longlongpower(intn,longlongtimes){if(times==1)returnn;if(ti......