zoukankan      html  css  js  c++  java
  • Problem K: Yikes -- Bikes!

    http://acm.upc.edu.cn/problem.php?id=2780

    昨天做的题,没过……!!!伤心……
    题意:给你n个单位,n-1组关系,让你单位换算……
    解题思路:Floyd算法
    自己听别人说用Floyd算法,然后自己默默的用有向图写……但是!!!Floyd算法不能用有向图……!所以只能在其相反的转化中标记为负的,在进行时特殊处理一下,最后便利找出能进行单位转化的那组单位,然后进行大小排序,最后就莫名其妙的哦过了……!!!

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    #include <map>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <queue>
    #include <stack>
    #include <cctype>
    #include <set>
    #define ALL(x) x.begin(),x.end()
    #define INS(x) inserter(x,x.begin())
    
    typedef long long LL;
    
    using namespace std;
    
    int graph[30][30];
    int c[30];
    int topo[30];
    int n;
    int t;
    struct Value{
        int x,y;
    };
    
    bool cmp(Value a,Value b){
        return a.x > b.x;
    }
    
    int main()
    {
    #ifndef ONLINE_JUDGE
       freopen("in.in","r",stdin);
    #endif
        map<string,int>un;
        string name[30];
        while(cin >> n && n){
        for(int i = 1;i <= n;i++){
            cin >> name[i];
            un[ name[i] ] = i;
        }
        memset(graph,0,sizeof(graph));
        for(int i = 1;i <= n-1;i++){
            string str1;
            int num,a,b;
            cin >> str1;
            a = un[str1];
            cin >> str1 >> num >> str1;
            b = un[str1];
            graph[a][b] = num;
            graph[b][a] = -1 *num;
            //cout <<a << " " << b << endl;
        }
        for(int k = 1;k <= n;k++){
            for(int i = 1;i <= n;i++){
                for(int j = 1;j <= n;j++){
                    if(i == j || k == i || k == j)
                        continue;
                    if(!graph[i][j] &&graph[i][k] &&graph[k][j]){
                        if(graph[i][k] > 0 && graph[k][j] > 0){
                            graph[i][j] = graph[i][k] * graph[k][j];
                            graph[j][i] = -1 * graph[i][k] * graph[k][j];
                        }
                        else if(graph[i][k] < 0 && graph[k][j] < 0){
                            graph[j][i] = graph[i][k] * graph[k][j];
                            graph[i][j] = -1 * graph[i][k] * graph[k][j];
                        }
                        else if(graph[i][k] < 0 && graph[k][j] > 0){
                            if(abs(graph[i][k]) > graph[k][j]){
                                graph[j][i] = abs(graph[i][k]) / graph[k][j];
                                graph[i][j] = -1 * graph[j][i];
                            }
                            else{
                                graph[i][j] = abs(graph[i][k]) / graph[k][j];
                                graph[j][i] = -1 * graph[i][j];
                            }
                        }
                        else{
                            if(graph[i][k] > abs(graph[k][j])){
                                graph[i][j] = graph[i][k] / abs(graph[k][j]);
                                graph[j][i] = -1 * graph[i][j];
                            }
                            else{
                                graph[j][i] = graph[i][k] / abs(graph[k][j]);
                                graph[i][j] = -1 * graph[j][i];
                            }
                        }
                    }
                }
            }
        }
        int mark;
        for(int i = 1;i <= n;i++){
            bool flag = 1;;
            for(int j = 1;j <= n;j++){
                if(graph[i][j] < 0){
                    flag = 0;
                    break;
                }
            }
            if(flag){
                mark = i;
                break;
            }
        }
        Value a[30];
        for(int i = 1;i <= n;i++){
            a[i-1].x = graph[mark][i];
            a[i-1].y = i;
        }
        sort(a,a+n,cmp);
        cout << 1  << name[ a[n-1].y ];
        for(int i = n-2;i > -1;i--){
            cout << " = "<< a[i].x << name[ a[i].y ] ;
        }
        cout << endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    iOS 开发之粒子效果
    ios 中使用SBJson拼接和解析json
    iphone document 图片存储和读取
    ios项目绕过证书访问https程序
    我应该直接学Swift还是Objective-C?
    iOS中使用 Reachability 检测网络
    iOS App性能优化
    iOS中的堆(heap)和栈(stack)的理解
    iOS中引用计数内存管理机制分析
    iOS多线程编程Part 3/3
  • 原文地址:https://www.cnblogs.com/hanbinggan/p/4256779.html
Copyright © 2011-2022 走看看