poj 3613 Cow Relays

poj 3613 Cow Relays

大家好,又见面了,我是全栈君。

Cow Relays
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 5411   Accepted: 2153

Description

For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race using the T (2 ≤ T ≤ 100) cow trails throughout the pasture.

Each trail connects two different intersections (1 ≤ I1i ≤ 1,000; 1 ≤ I2i ≤ 1,000), each of which is the termination for at least two trails. The cows know the lengthi of each trail (1 ≤ lengthi  ≤ 1,000), the two intersections the trail connects, and they know that no two intersections are directly connected by two different trails. The trails form a structure known mathematically as a graph.

To run the relay, the N cows position themselves at various intersections (some intersections might have more than one cow). They must position themselves properly so that they can hand off the baton cow-by-cow and end up at the proper finishing place.

Write a program to help position the cows. Find the shortest path that connects the starting intersection (S) and the ending intersection (E) and traverses exactly N cow trails.

Input

* Line 1: Four space-separated integers: NTS, and E
* Lines 2..T+1: Line i+1 describes trail i with three space-separated integers: lengthi , I1i , and I2i

Output

* Line 1: A single integer that is the shortest distance from intersection S to intersection E that traverses exactly N cow trails.

Sample Input

2 6 6 4
11 4 6
4 4 8
8 4 9
6 6 8
2 6 9
3 8 9

Sample Output

10

n次floyd,原来flody也能够像矩阵一样高速幂。详细的能够看论文《矩阵乘法在信息学的应用》

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int inf=(1<<30)-1;
int n;
int hash[3010];//映射
struct matrix
{
    int ma[210][210];
    matrix()
    {
       for(int i=0;i<210;i++)
          for(int j=0;j<210;j++)
           ma[i][j]=inf;
    }
};
matrix floyd(matrix x,matrix y)
{
    matrix ans;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            for(int k=1;k<=n;k++)
            ans.ma[i][j]=min(ans.ma[i][j],x.ma[i][k]+y.ma[k][j]);
        }
    }
    return ans;
}
matrix pow(matrix a,int m)
{
    matrix ans;
    for(int i=1;i<=n;i++)
    ans.ma[i][i]=0;
    while(m)
    {
        if(m&1)
        ans=floyd(ans,a);
        a=floyd(a,a);
        m=m>>1;
    }
    return ans;
}
int main()
{
    int k,t,s,e;
    while(~scanf("%d%d%d%d",&k,&t,&s,&e))
    {
        int x,y,d;
        memset(hash,0,sizeof(hash));
        n=1;
        matrix a;
        for(int i=0;i<t;i++)
        {
            scanf("%d%d%d",&d,&x,&y);
            if(!hash[x])
            hash[x]=n++;
            if(!hash[y])
            hash[y]=n++;
            a.ma[hash[x]][hash[y]]=a.ma[hash[y]][hash[x]]=d;
        }
        n=n-1;
        matrix ans;
        ans=pow(a,k);
        printf("%d\n",ans.ma[hash[s]][hash[e]]);
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115421.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手机射频架构解析(zen2架构解析)

    一、射频电路组成和特点:普通手机射频电路由接收通路、发射通路、本振电路三大电路组成。其主要负责接收信号解调;发射信息调制。早期手机通过超外差变频(手机有一级、二级混频和一本、二本振电路),后才解调出接收基带信息;新型手机则直接解调出接收基带信息(零中频)。更有些手机则把频合、接收压控振荡器(RX…

    2022年4月12日
    62
  • latex更改字体大小_修改字体字号的方法

    latex更改字体大小_修改字体字号的方法Latex中的字体一共有这些种:\tiny\scriptsize\footnotesize\small\normalsize\large\Large\LARGE\huge\Huge一般来说默认的是\normalsize.我们可以在开始重新定义默认字体大小:\documnetclass[12pt]{article}修改12pt的值即可,Latex提供了三种大小:10/……

    2022年10月11日
    1
  • web调用打印机自动打印_网页打印如何设置默认打印机

    web调用打印机自动打印_网页打印如何设置默认打印机浏览器网页打印前言客户对于一些插件比较敏感,如金融、银行等出于安全的考虑和产品的把控,可能不愿意页面打印的时候,客户端浏览器安装插件。(当然,用户有各种各样的需求和打印格式要求,愿意使用打印控件的,开发的打印功能当然很好。)所以直接使用浏览器自带的打印功能,就成为一个选择。打印功能介绍2.1普通打印如果要将当前网页的内容直接打印到白纸上,很简单,使用如下js代码即可实现。…

    2025年7月28日
    3
  • Generic Host process for Win32 service 解决办法「建议收藏」

    Generic Host process for Win32 service 解决办法「建议收藏」在开始–>运行(或者使用快捷键:windows+R)中输入regsvr32Urlmon.dll(enter)  regsvr32Shdocvw.dll(enter)  regsvr32Msjava.dll(enter)  regsvr32Actxprxy.dll(enter)  regsvr32Oleaut32.dll(enter)  regsvr32Mshtml.dll(enter)  regsvr32Browseui.dll(e

    2022年10月12日
    4
  • JSONObject转集合List

    JSONObject转集合ListJSONObject转集合ListStringjsonObjString=responseJsonObj.getString(“Result”);List<PurchaseOrder>purchaseOrders=(List<PurchaseOrder>)JSONArray.parseArray(jsonObjString,Purc…

    2022年5月12日
    50
  • nginx负载均衡的原理简介_负载均衡原理

    nginx负载均衡的原理简介_负载均衡原理1、Nginx负载均衡的原理是什么?​客户端向反向代理发送请求,接着反向代理根据某种负载机制转发请求至目标服务器(这些服务器都运行着相同的应用),并把获得的内容返回给客户端,期中,代理请求可能根据配置被发往不同的服务器。2、Nginx负载均衡的作用是什么?​负载均衡:分摊到多个操作单元上进行执行,和它的英文名称很匹配。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服…

    2022年10月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号