zoukankan      html  css  js  c++  java
  • 差分约束Poj3159 Candies

    没负环。直接搞就行,但是 spfa 队列会超时。 
     
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <string>
    #include <iostream>
    int n;
    using namespace std;
    struct edge
    {
    	int to;int val;int next;
    }e[555555];
    
    int len;int head[33333];
    
    void add(int from ,int to,int val)
    {
    	e[len].to=to;e[len].val=val;
    	e[len].next=head[from];head[from]=len++;
    }
    
    const int INF=0xfffffff;
    int dis[44444];
    void spfa(int x)
    {
    	int vis[444444];
    	for(int i=1;i<=n;i++) vis[i]=0;
    	for(int i=1;i<=n;i++) dis[i]=INF;
    	dis[x]=0; vis[x]=1;
    	stack<int> q;// 不知道为什么 栈能过  队列却不行。
    	q.push(x);
    	while(!q.empty()){
    		int cur=q.top();vis[cur]=0;q.pop();
    		for(int i= head[cur];i!=-1;i=e[i].next){
    			int cc=e[i].to;
    			if(dis[cc]>dis[cur]+e[i].val){
    				dis[cc]=dis[cur]+e[i].val;
    				if(!vis[cc]){
    					vis[cc]=1;
    					q.push(cc);
    				}
    			}
    		}
    	}
    }
    
    int main()
    {
    	int m;
    	scanf("%d%d",&n,&m);
    		len=0;memset(head,-1,sizeof(head));
    		for(int i=0;i<m;i++){
    			int a,c,b;
    			scanf("%d%d%d",&a,&b,&c);
    			add(a,b,c);
    		}
    		spfa(1);
    		printf("%d
    ",dis[n]);
    	return 0;
    }
    

      

  • 相关阅读:
    经济--1...19
    经济
    金融--
    经济--番外篇
    经济--基金问答
    经济--如何买基金?
    PHP面向对象常见的关键字和魔术方法
    php对象中类的继承性访问类型控制
    详解PHP的__set()、__get()、__isset()、unset()四个方法
    子类重载父类的方法“parent:方法名”
  • 原文地址:https://www.cnblogs.com/yigexigua/p/3770269.html
Copyright © 2011-2022 走看看