求助!
  • 板块学术版
  • 楼主Dehydration
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/11/8 19:27
  • 上次更新2023/10/27 03:43:42
查看原帖
求助!
661534
Dehydration楼主2022/11/8 19:27

TLE第一点求调:

#include<bits/stdc++.h>
using namespace std;
struct fuck
{
	int next;
	int to;
	int money;
};
int head[2000001];
int cnt=1;
fuck a[8000001];
void add(int x,int y,int s);
int main() 
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
    int n,m;
    int flag;
    cin>>n>>m>>flag;
    if(flag)
    for(int i=1;i<=m;i++)
    {
    	int x,y,z;
    	cin>>x>>y>>z;
    	add(x,y,z);
	}else
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);
	}
	for(int i=1;i<=n;i++)
	{
		//if(head[i]==0)
		/*cout<<endl;else*/
		for(int k=head[i];k;k=a[k].next)
		{
			cout<<i<<' '<<a[k].to<<' '<<a[k].money<<endl;
		 } 
	}
    return 0;
}
void add(int x,int y,int s)
{
	a[cnt].money=s;
	a[cnt].to=y;
	a[cnt].next=head[x];
	head[x]=cnt++;
}

【模板】链式前向星

题目描述

链式前向星模板题,读入n个点,m条边,以及flag,若flag==1则图有向,否则无向。对每个点输出它的每一条边。

输入格式

第一行三个数n,m,flag,题意如上所示 第2~1+m行,每行三个数,x,y,z,代表从x到y有一条长为z的边

输出格式

若flag=1则m行,flag=0则m*2行,每行三个数,即该点的编号、所指向点的编号,边的长度,先按第一个数升序排列,再以链式前向星中的顺序输出即可。 (其实就是i从1到n,再按顺序查找边输出即可) 特殊的,若该点无出边,单独一个空行

样例 #1

样例输入 #1

5 5 0
1 2 5
1 4 6
2 3 7
3 5 3
3 4 1

样例输出 #1

1 4 6
1 2 5
2 3 7
2 1 5
3 4 1
3 5 3
3 2 7
4 3 1
4 1 6
5 3 3
2022/11/8 19:27
加载中...