zoukankan      html  css  js  c++  java
  • POJ

    POJ - 1847 题目链接

    思路

    题意比较简单,关键在于如何转化为图的过程。

    • 首先,我们对条件进行分析n最大是100,那么这题极有可能是Floyd
    • 再而,切换开关需要的花费是1,每个开关链接着两个点,这里可以看作是一条边链接两个点。
    • 最后,确定边权值,切换开关边权值是1,不切换开关边权值是0,完成建图,跑一边floyd。

    代码

    //Powered by CK 2020/04/03
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int N = 110;
    const int INF = 0x3f3f33f;
    int ans[N][N], rt, st, n;
    void init() {
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                if(i == j)  ans[i][j] = 0;
                else    ans[i][j] = INF;
    }
    void Floyd() {
        for(int k = 1; k <= n; k++)
            for(int i = 1; i <= n; i++)
                for(int j = 1; j <= n; j++)
                    ans[i][j] = min(ans[i][j], ans[i][k] + ans[k][j]);
        if(ans[rt][st] == INF)  puts("-1");
        else    printf("%d
    ", ans[rt][st]);
    }
    int main() {
        // freopen("in.txt", "r", stdin);
        int x, y, w;
        while(scanf("%d %d %d", &n, &rt, &st) != EOF) {
            init();
            for(int i = 1; i <= n; i++) {
                int sum;
                scanf("%d", &sum);
                for(int j = 1; j <= sum; j++) {
                    scanf("%d", &y);
                    if(j == 1)  ans[i][y] = 0;
                    else    ans[i][y] = 1;
             }
            }
            Floyd();
        }
        return 0;
    }
    
    
  • 相关阅读:
    spark foreachPartition
    spark mapPartition
    spark union intersection subtract
    spark join 类算子
    spark action 算子
    卷展栏模板
    锁定/解锁
    3D一些提示信息
    文件对话框多选
    吸取属性
  • 原文地址:https://www.cnblogs.com/lifehappy/p/12626932.html
Copyright © 2011-2022 走看看