昨天看图论的时候找到了这么个题目,刚开始不知道查分约束是什么东西,后来在网上学了一下,知道就是求图的最短路径额。。。。。这东西需要好好看看了。
再看这个题目,题意就是给出两点的最大差值,求出1到n的最大差值,刚开始用的一般的方法这个问题超时了,所以用的优先队列,最后ac了。。。(简简单单两行字,这里面全是泪额。。。。。)
上代码。。。。。
#include
#include
#include
#include
#include
#define Max 0x3f3f3f
using namespace std;
typedef pair P;
int d[30005];
int head[30005];
int n,m;
int num1,num2,num3;
int top;
struct node
{
int value;
int to;
int next;
}x[150010];
void add(int a,int b,int c)
{
x[top].to=b;
x[top].value=c;
x[top].next=head[a];
head[a]=top++;
}
void Init()
{
top=0;
for (int i=1;i<=n;i++)
{
head[i]=-1;
d[i]=Max;
}
}
void Diskj()
{
d[1]=0;
priority_queue,greater
>que;
que.push(P(0,1));
int first,last;
while(que.size())
{
P p=que.top();
que.pop();
first=p.first;
last=p.second;
if (d[last]x[i].value+d[last])
{
d[x[i].to]=x[i].value+d[last];
que.push(P(d[x[i].to],x[i].to));
}
}
}
int z=d[n];
printf("%d\n",z);
}
int main()
{
scanf("%d %d",&n,&m);
{
Init();
while(m--)
{
scanf("%d %d %d",&num1,&num2,&num3);
add(num1,num2,num3);
}
Diskj();
}
}