zoukankan      html  css  js  c++  java
  • P1186 玛丽卡

    P1186 玛丽卡


    读题真的好恶心

    实际上是考察了spfa中路径记录的问题

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    struct node
    {
    	int point;
    	int nxt;
    	int weight;
    };
    node line[1000000];
    int head[1001],tail;
    int dis[1010];
    bool can[1010][1010];
    bool inque[1010];
    int pre[1010];
    int n,m;
    queue<int>q;
    void add(int a,int b,int c)
    {
    	line[++tail].point=b;
    	line[tail].nxt=head[a];
    	line[tail].weight=c;
    	head[a]=tail;
    }
    void spfa(int base)
    {
    	for(int i=2;i<=n;i++)
    	{
    		inque[i]=false;
    		dis[i]=0x7ffffff;	
    	}
    	dis[1]=0;
    	inque[1]=true;
    	q.push(1);
    	while(!q.empty())
    	{
    		int pass=q.front();
    		q.pop();
    		inque[pass]=false;
    		for(int need=head[pass];need;need=line[need].nxt)
    		{
    			if(dis[line[need].point]>dis[pass]+line[need].weight&&!can[pass][line[need].point])
    			{
    				dis[line[need].point]=dis[pass]+line[need].weight;
    				if(base)
    					pre[line[need].point]=pass;
    				if(!inque[line[need].point])
    				{
    					q.push(line[need].point);
    					inque[line[need].point];
    				}
    			}
    		}
    	}
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	int a,b,c;
    	for(int i=1;i<=m;i++)
    	{
    		scanf("%d%d%d",&a,&b,&c);
    		add(a,b,c);
    		add(b,a,c);
    	}
    	int maxn=-0x7fffffff;
    	spfa(1);
    	for(int i=n;i;i=pre[i])//倒叙便利十分好实现,如果是输出路径的话就可以再来一个stack了
    	{
    		can[i][pre[i]]=can[pre[i]][i]=true;
    		spfa(0);
    		maxn=max(dis[n],maxn);
    		can[i][pre[i]]=can[pre[i]][i]=false;
    	}
    	printf("%d",maxn);
    }
    
  • 相关阅读:
    python 数据分析3
    python 数据分析2
    Python 数据分析1
    Python18 Django 基础
    Python 17 web框架&Django
    一只救助犬的最后遗言
    With As 获取 id parentId 递归获取所有
    分布式事物
    div 浮动框
    sql时间比较
  • 原文地址:https://www.cnblogs.com/Lance1ot/p/8686483.html
Copyright © 2011-2022 走看看