zoukankan      html  css  js  c++  java
  • XTU2016CCPC中南邀请赛C

    Hamiltonian Path

    Accepted : 74   Submit : 189
    Time Limit : 2000 MS   Memory Limit : 65536 KB 

    Hamiltonian Path

    In ICPCCamp, there are n cities and m directed roads between cities. The i-th road going from the ai-th city to the bi-th city is ci kilometers long. For each pair of cities (u,v), there can be more than one roads from u to v.

    Bobo wants to make big news by solving the famous Hamiltonian Path problem. That is, he would like to visit all the n cities one by one so that the total distance travelled is minimized.

    Formally, Bobo likes to find n distinct integers p1,p2,,pn to minimize w(p1,p2)+w(p2,p3)++w(pn1,pn) where w(x,y) is the length of road from the x-th city to the y-th city.

    Input

    The input contains at most 30 sets. For each set:

    The first line contains 2 integers n,m (2n105,0m105).

    The i-th of the following m lines contains 3 integers ai,bi,ci (1ai<bin,1ci104).

    Output

    For each set, an integer denotes the minimum total distance. If there exists no plan, output -1 instead.

    Sample Input

    3 3
    1 2 1
    1 3 1
    2 3 1
    3 2
    1 2 1
    1 3 2
    

    Sample Output

    2
    -1

    注意条件ai是小于bi!这意味着什么?意味着只能1到2,2到3的来走,任何一个跳着城市编号的道路都是无用条件,只需要把最小的相邻城市的路加起来就行了。。。mp[i]表示i到i+1的城市路径,只要条件中缺少一个mp[i]就不能满足,只能输出-1

    #include <bits/stdc++.h>
    
    typedef long long ll;
    using namespace std;
    const int maxn = 1e4;
    int mp[maxn+10];
    ll ans;
    
    int main() {
    //    freopen("in.txt","r",stdin);
        int n,m;
        int flag = 0;
        while(~scanf("%d%d",&n,&m)) {
            ans = 0LL;
            for(int i = 1; i <= maxn; i++) mp[i] = maxn;
    //        cout<<ans;
            while(m--) {
                int a,b,c;
                cin>>a>>b>>c;
                if(a==b-1) {
                    if(mp[a]>c) {
                        mp[a] = c;
                    }
                }
            }
            for(int i = 1; i < n; i++) {
                if(mp[i]!=maxn) {
                    ans += mp[i];
                }
                else {
                    puts("-1");
                    flag = 1;
                    break;
                }
            }
            if(!flag)
                cout<<ans<<endl;
        }
    }
    


  • 相关阅读:
    JDBC 查询的三大参数 setFetchSize prepareStatement(String sql, int resultSetType, int resultSetConcur)
    有空必看
    SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换
    FusionCharts JavaScript API Column 3D Chart
    FusionCharts JavaScript API
    FusionCharts JavaScript API
    Extjs 继承Ext.Component自定义组件
    eclipse 彻底修改复制后的项目名称
    spring 转换器和格式化
    Eclipse快速生成一个JavaBean类的方法
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256619.html
Copyright © 2011-2022 走看看