• 个人简介

    imageimage

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    const int N=1e6+5; 
    int idx;//第idx条边
    int e[N];//终点 
    int h[N];//h[a]=idx表示节点a后第一条边后是第idx条 
    int ne[N];//ne[idx]=x第idx条边后面是第x条边 
    int w[N]; //第idx条边的权值 
    void add(int x,int y,int z)//x->y 权值为c 
    {
    		e[idx]=y;//第idx条边终点为y  即->y 
    		ne[idx]=h[x];//第idx条由于是a后边,要连到a后的第一条边,将原来a后的头边放在第idx条边后面 
    		w[idx]=z;//第idx条边的权值 
    		h[x]=idx++;//a后第一条边为是idx后一条 
    }
    int main()
    {
    	memset(h,-1,sizeof(h));
    	cin>>n>>m;
    	while(m--)
    	{
    		int x,y,z;
    		cin>>x>>y>>z;
    		add(x,y,z);
    	}
    	for(int i=1;i<=n;i++)
    	{
    		cout<<i<<":";
    		for(int j=h[i];j!=-1;j=ne[j])
    		{
    			printf("(%d,%d)->",e[j],w[j]);
    		}
    		cout<<endl;
    	}
    }
    
    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    const int N=1e5+5;
    int idx;
    int e[N];//终点 
    int h[N];//后一条边 
    int ne[N];//下一条边 
    int w[N];//权值 
    int d[N];//表示起点到i的最短路径
    bool v[N];//标记 	
    void add(int a,int b,int c)//a->b 权值c
    {
    	e[idx]=b;//第idx条边终点为y  即->y 
    	ne[idx]=h[a];//第idx条由于是a后边,要连到a后的第一条边,将原来a后的头边放在第idx条边后面 
    	w[idx]=c;//第idx条边的权值 
    	h[a]=idx++;//a后第一条边为是idx后一条 
     } 
    int main()
    {
    	memset(h,-1,sizeof(h));
    	memset(d,0x3f,sizeof(d));
    	cin>>n>>m;
    	for(int i=1;i<=m;i++)
    	{
    		int u,v,c;
    		cin>>u>>v>>c;
    		add(u,v,c);
    	}
    	d[1]=0;
    	for(int i=1;i<=n;i++)//把n个点都标记 
    	{
    		int dot=-1;//本轮要标记的点
    		for(int j=1;j<=n;j++)
    		{
    			 if(v[j]==0&&(dot==-1||d[dot]>d[j])) 
    			 {
    			 	dot=j;
    			 }
    		 } 
    		 v[dot]=1;
    		 for(int j=h[dot];j!=-1;j=ne[j])
    		 {
    		 	int dot2=e[j];//第j条边的终点
    			d[dot2]	=min(d[dot2],d[dot]+w[j ])
    		 }
    	}
    	cout<<d[n];
    }
    
    
    

    朱老师团队

  • 通过的题目

  • 最近活动

题目标签

初窥门径
4
顺序结构
4
GESP四级
3
搜索
3
枚举
3
二维数组
2
模拟
2
GESP
2
其他
1
位运算
1
循环结构
1
驾轻就熟
1
融会贯通
1
暴搜
1
DFS
1
BFS
1
循环嵌套
1
函数
1
进制转换
1
GESP三级
1