Gravatar
Hale
积分:2088
提交:510 / 1054
终于从SPFA转到了dij堆优化

Gravatar
CSU_Turkey
积分:1723
提交:614 / 1589
spfa优化

题目 397 [USACO Oct09] 热浪
2017-12-31 08:42:30
Gravatar
WHZ0325
积分:1231
提交:347 / 532
唉,head和next数组的大小应该和边相同啊......

Gravatar
Fisher.
积分:939
提交:301 / 521
回复 @Turkey :
建议全敲堆优化迪杰斯塔,最稳定了....

Gravatar
CSU_Turkey
积分:1723
提交:614 / 1589
第一发堆优化dijkstra
最短路全在这水的

Gravatar
CSU_Turkey
积分:1723
提交:614 / 1589
多好的模板题见证了我从矩阵到编表到前向星
从迪杰斯特拉到spfa

题目 397 [USACO Oct09] 热浪
2017-06-06 15:09:41
Gravatar
YGOI_真神名曰驴蛋蛋
积分:1983
提交:671 / 1901
FIB-HEAP捂脸
PAIR-HEAP捂脸

题目 397 [USACO Oct09] 热浪
2016-10-03 15:10:25
Gravatar
浮生随想
积分:1923
提交:560 / 1045
2000分纪念!!撒花~~

题目 397 [USACO Oct09] 热浪
2016-09-08 15:25:56
Gravatar
Sky_miner
积分:2790
提交:902 / 1646
inline 加速光环^_^...

Gravatar
Hzoi_
积分:1680
提交:530 / 743
真科学,边表80,邻接矩阵100。。。

Gravatar
Hzoi_
积分:1680
提交:530 / 743
好神奇,前8个点全过,最后两个一个W一个T。。。

Gravatar
Hzoi_
积分:1680
提交:530 / 743
回复 @--<-<-< :
直接贴代码真的好么

题目 397 [USACO Oct09] 热浪
2016-01-18 15:27:03
Gravatar
Hzoi_
积分:1680
提交:530 / 743
回复 @真神名曰驴蛋 :
No zuo no die why you try
You try you die 怪 我 咯

题目 397 [USACO Oct09] 热浪
2016-01-18 15:26:43
Gravatar
YGOI_真神名曰驴蛋蛋
积分:1983
提交:671 / 1901
Openjudge上没事,这边卡= =;
求助

Gravatar
SOBER GOOD BOY
积分:2024
提交:588 / 930
回复 @智霞Forever :
#include<iostream>
#include<cstdlib>
#include<queue>
#include<cstdio>
#include<ctime>
#include<cstdio>
#include<cstring>
const int maxn=110;
int m,n,len=0,head[maxn],dis[maxn][maxn];
const int maxe=maxn*maxn;
using namespace std;
struct node
{
int num,dis;
node(){};
node(int a,int b)
{
num=a,dis=b;
}
bool operator < (const node&a)const
{
return dis>a.dis;
}
};
struct Edge
{
int dis,to,next;
}e[maxe];
void Dijs(int);
void Init();
void Insert(int,int,int);
int main()
{
Init();
Dijs(0);
//while(1);
return 0;
}
void Init()
{
memset(head,-1,sizeof(head));
memset(dis,0,sizeof(dis));
memset(e,0,sizeof(e));
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
Insert(x,y,z);
Insert(y,x,z);
}
}
void Insert(int x,int y,int z)
{
len++;
e[len].to=y;
e[len].dis=z;
e[len].next=head[x];
head[x]=len;
}
void Dijs(int x)
{
int d[maxn];
memset(d,0x7f,sizeof(d));
bool f[maxn]={0};
priority_queue<node> q;
d[x]=0;
q.push(node(x,d[x]));
while(!q.empty())
{
node temp=q.top();q.pop();
int k=temp.num;
f[k]=1;
for(int i=head[k];i!=-1;i=e[i].next)
{
int j=e[i].to;
if(!f[j]&&d[j]>d[k]+e[i].dis)
{
d[j]=d[k]+e[i].dis;
q.push(node(j,d[j]));
}
}
}
for(int i=0;i<n;i++)
{
dis[x][i]=d[i];
}
}

Gravatar
SOBER GOOD BOY
积分:2024
提交:588 / 930
回复 @智霞Forever :
#include<iostream>
#include<cstdlib>
#include<queue>
#include<cstdio>
#include<ctime>
#include<cstdio>
#include<cstring>
const int maxn=110;
int m,n,len=0,head[maxn],dis[maxn][maxn];
const int maxe=maxn*maxn;
using namespace std;
struct node
{
int num,dis;
node(){};
node(int a,int b)
{
num=a,dis=b;
}
bool operator < (const node&a)const
{
return dis>a.dis;
}
};
struct Edge
{
int dis,to,next;
}e[maxe];
void Dijs(int);
void Init();
void Insert(int,int,int);
int main()
{
Init();
Dijs(0);
//while(1);
return 0;
}
void Init()
{
memset(head,-1,sizeof(head));
memset(dis,0,sizeof(dis));
memset(e,0,sizeof(e));
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
Insert(x,y,z);
Insert(y,x,z);
}
}
void Insert(int x,int y,int z)
{
len++;
e[len].to=y;
e[len].dis=z;
e[len].next=head[x];
head[x]=len;
}
void Dijs(int x)
{
int d[maxn];
memset(d,0x7f,sizeof(d));
bool f[maxn]={0};
priority_queue<node> q;
d[x]=0;
q.push(node(x,d[x]));
while(!q.empty())
{
node temp=q.top();q.pop();
int k=temp.num;
f[k]=1;
for(int i=head[k];i!=-1;i=e[i].next)
{
int j=e[i].to;
if(!f[j]&&d[j]>d[k]+e[i].dis)
{
d[j]=d[k]+e[i].dis;
q.push(node(j,d[j]));
}
}
}
for(int i=0;i<n;i++)
{
dis[x][i]=d[i];
}
}

题目 397 [USACO Oct09] 热浪
2016-01-17 17:13:11
Gravatar
Hzoi_
积分:1680
提交:530 / 743
为啥自己测样例就对了,提上去就错= =

Gravatar
liu_runda
积分:2889
提交:1014 / 2190
注意是无向图,边表要开到最大边数的两倍。

Gravatar
一個人的雨
积分:2062
提交:546 / 1090
2500个城镇看成1500个了。。。

Gravatar
不错封ID几十块
积分:138
提交:35 / 151