• pku 3159 Candies


    题意:

    小孩A认为小孩B比自己多出的最多不会超过c个糖果,也就是 B - A <= c,正好符合差分约束方程,就是A到B的边权w(A, B) = c;用 SPFA + 栈 能过。

    这题目,应该也算是差分约束的基础题吧,只不过用SPFA+队列实现超时了,无语呀

    #include<iostream>
    #define MAXINT 9999999
    #define MAXN 30010
    using namespace std;
    int vis[MAXN],dis[MAXN],n,num,m;
    int root[MAXN],stack[MAXN];
    struct edge
    {
    	int u,w,next;
    }e[MAXN*5];
    void spfa()
    {
    	int top=0;
    	for(int i=1;i<=n;i++)
    	{
    		dis[i]=MAXINT;
    	}
    	dis[1]=0;
    	stack[++top]=1;
    	vis[1]=1;
    	while(top)
    	{
    		int t=stack[top--],tmp;
    		vis[t]=0;
    		for(int j=root[t];j!=-1;j=e[j].next)
    		{
    			tmp=e[j].u;
    			if(dis[tmp]>dis[t]+e[j].w)
    			{
    				dis[tmp]=dis[t]+e[j].w;
    				if(!vis[tmp])
    				{
    					vis[tmp]=1;
    					stack[++top]=tmp;
    				}
    			}
    		}
    	}
    }
    
    int main()
    {
    	int a,b,c;
    	cin>>n>>m;num=0;
    	memset(root,-1,sizeof(root));
    	memset(vis,0,sizeof(vis));
    	for(int i=0;i<m;i++)
    	{
    		scanf("%d %d %d",&a,&b,&c);
    		e[num].u=b;
    		e[num].w=c;
    		e[num].next=root[a];
    		root[a]=num++;
    	}
    	spfa();
    	cout<<dis[n]<<endl;
    }
    
    		
    
  • 相关阅读:
    POJ 3672 水题......
    POJ 3279 枚举?
    STL
    241. Different Ways to Add Parentheses
    282. Expression Add Operators
    169. Majority Element
    Weekly Contest 121
    927. Three Equal Parts
    910. Smallest Range II
    921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/nanke/p/2137881.html
Copyright © 2020-2023  润新知