zoukankan      html  css  js  c++  java
  • 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;
    }
    
    		
    
  • 相关阅读:
    windows10输入法评价
    找水王
    团队项目第九天
    团队项目第八天
    团队项目第七天
    团队项目第六天
    团队项目第四天
    团队项目第五天
    团队项目第三天
    团队项目第二天
  • 原文地址:https://www.cnblogs.com/nanke/p/2137881.html
Copyright © 2011-2022 走看看