poj-3159【差分约束+Dijkstra算法的优化】

昨天看图论的时候找到了这么个题目,刚开始不知道查分约束是什么东西,后来在网上学了一下,知道就是求图的最短路径额。。。。。这东西需要好好看看了。

再看这个题目,题意就是给出两点的最大差值,求出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(); } }


 

转载于:https://www.cnblogs.com/GregZQ/p/8365298.html

你可能感兴趣的:(poj-3159【差分约束+Dijkstra算法的优化】)