zoukankan      html  css  js  c++  java
  • TYVJ1423 GF和猫咪的玩具

    Description:

    GF同学和猫咪得到了一个特别的玩具,这个玩具由n个金属环(编号为1---n),和m条绳索组成,每条绳索连接两个不同的金属环,并且长度相同。GF左手拿起金属环L,猫咪右手(或者说:爪)拿起金属环R(L不等于R),然后尽量的向两边拉,他希望选择合适的L和R,使得被拉紧的绳索尽量的多。

    注:如果像样例那样1-2-4-3-5-6-1构成了一个环,我们认为拉1和3时只能拉紧一边(1-2-4-3或3-5-6-1)而不算全部拉紧。通俗地说,也就是当两个环之间有几个绳索数相等的连接方法时,只算其中一条连接方法拉紧,不算全部拉紧。

    Input:

    第一行包含两个正整数n,m
    接下来的m行包含两个正整数a,b,表示有一条绳索连接了a和b的绳索。
    n<=100

    Output:

    仅包含一个整数,表示最多能拉紧的绳索数。

    思路:不错的题,模拟,弗洛伊德变形。

    #include<iostream>
    #include<cstring>
    using namespace std;
    const int N = 110;
    int g[N][N], d[N][N], n, m;
    int main(){
        ios::sync_with_stdio(false);
        cin>>n>>m;
        int x, y, z;
        for(int i = 1; i <= m; i++){
            cin>>x>>y;
            g[y][x] = g[x][y] = 1;
            d[x][y] = d[y][x] = 1;
        }
        for(int k = 1; k <= n; k++)
          for(int i = 1; i <= n; i++)
            if(d[i][k] > 0)
              for(int j = 1; j <= n; j++)
                if(d[k][j] > 0)
                  if(i != j){
                    if(g[i][j] == 1) d[i][j] = 1;
                    else if(d[i][j] > d[i][k] + d[k][j]) d[i][j] = d[i][k] + d[k][j];
                    else if(d[i][j] == 0) d[i][j] = d[i][k] + d[k][j];
                  }
                   
        int ans = 0;
        for(int i = 1; i < n; i++)
          for(int j = i + 1; j <= n; j++)
            ans = max(ans, d[i][j]);
        cout<<ans<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    IO复习
    递归
    转换流
    编码与解码
    打印流(printStream)
    Properties
    【转】将Visual Studio武装到底
    【转】VS2008中的自定义格式化代码
    C++开发工具的常用插件
    抽烟的注意事项
  • 原文地址:https://www.cnblogs.com/Rorshach/p/8724768.html
Copyright © 2011-2022 走看看