中级守护
2371 列车路线(train)
经验值:1600 时间限制:1000毫秒
安徽省2018年信息学竞赛试题(小学组)
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
终于,卡卡西来到了一个叫“比特兰”的国家,“比特兰”是个很发达的国家, 有着非常高科技的列车,和非常复杂的列车线路。具体来说,从理论上,我们可 以假设这个国家的高科技列车可以不消耗时间的从 A 地瞬间转移到 B 地。同时, 铁路线路复杂到,每对城市之间都有列车连接。但是不幸的是,由于这种列车运 行需要很**护工作,所以每天只能发出一次。从 i 到 j 的列车(i≠j)会在 ti,j 时间发出(保证 ti,j 两两不同)。
如果有一条路径链接A和B两个城市,并且满足路径上的每一条边的发车时间单调递增(也就是说经过的每段铁路的发出时间都要大于上一段的,因为我们 需要从上一段铁路换乘下一段铁路)。 现在“比特兰”的铁路局想要知道,一天
之内,对于每一对i和j,如果想要从i到达j,最早多早能到达呢?
输入描述 Input Description
第1行是一个整数n,接下来n行,每行n个数表示tij(i=j,tij=t0)
输出描述 Output Description
n行,每行n个数表示i到j最早的到达时间。
样例输入 Sample Input
3
0 4 5
2 0 3
1 6 0
样例输出 Sample Output
0 4 5
2 0 3
1 4 0
数据范围及提示 Data Size & Hint
对于 20%的数据,n<=10
对于 40%的数据,n<=20
对于 60%的数据,n<=50
对于 100%的数据,n<=500, ti,j<=10^9
/*
搜索过程
int h=0,t=1;
memset(b,0x3f,sizeof(b));
p[1]=pos,m[1]=0;
do
{
h++;
for(int i=1;i<=n;i++)
{
if(i!=p[h]&&a[p[h]][i]>=m[h]&&b[i]>a[p[h]][i])
{
p[++t]=a[i];
m[t]=b[i]=a[p[h]][i];
ans[pos][i]=min(ans[pos][i],m[t]);
}
}
}while(h<t);
*/
#include <bits/stdc++.h>
#define maxn1 505
#define maxn2 250005
using namespace std;
int n,a[maxn1][maxn1],ans[maxn1][maxn1],b[maxn1],p[maxn2],m[maxn2];
void search(int pos)
{
int h=0,t=1;
memset(b,0x3f,sizeof(b));
p[1]=pos,m[1]=0;
do
{
h++;
for(int i=1;i<=n;i++)
{
if(i!=p[h]&&a[p[h]][i]>=m[h]&&b[i]>a[p[h]][i])
{
p[++t]=i;
m[t]=b[i]=a[p[h]][i];
ans[pos][i]=min(ans[pos][i],m[t]);
}
}
}while(h<t);
return ;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
}
}
memset(ans,0x3f,sizeof(ans));
for(int i=1;i<=n;i++)
{
search(i);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(ans[i][j]!=0x3f3f3f3f&&i!=j)printf("%d ",ans[i][j]);
else printf("0 ");
}
printf("\n");
}
return 0;
}
TLE 60分!
求大佬帮忙!
中级启示者
王老师昨天晚上下课后写了1h,结果TLE (
其实这题就是Dijkstra的变形,只需要把更新部分改一下就行了
for(int j=1;j<=n;j++){
if(f[pos]<a[pos][j]) f[j]=min(f[j],a[pos][j]); //时间不递增,不能更新
}
初级天翼
加上这个火车头试试
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize(2)