zoukankan      html  css  js  c++  java
  • [JSOI2007]重要的城市(x)

    开始(脑残ing)诶?

    暴力能过

    噼里啪啦码码码

    TLE TLE 啥?看错复杂度?带个25的常数 ?*……!%@……*%#…!@#!@#……*!@#&

    Floyd,并记录两点间的一个重要的城市。

    当出现等距离最短路时说明上该点上次的松弛点 并非唯一

    删去否则更新

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    const int maxn = 287;
    inline int read() {
        int x=0,f=1;
        char c=getchar();
        while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();}
        while(c<='9'&&c>='0') x=x*10+c-'0',c=getchar();
        return x*f;
    }
    int n,m,num=0;
    int map[maxn][maxn];
    int dis[maxn][maxn];
    bool vis[maxn];
    int main() {
        n=read(),m=read();
        memset(dis,0x3f,sizeof dis);
        for(int a,b,i=1;i<=m;++i) {
            a=read(),b=read();
            dis[a][b]=dis[b][a]=read();
        }
        for(int k=1;k<=n;++k) 
            for(int i=1;i<=n;++i)
                for(int j=1;j<=n;++j) {
                    if(i!=j&&j!=k) {
                        if(dis[i][j]>dis[i][k]+dis[k][j]) {
                            dis[i][j]=dis[i][k]+dis[k][j];
                            map[i][j]=k;
                        }
                        else if(dis[i][j]==dis[i][k]+dis[k][j]) map[i][j]=0;
                    }
                }
        for(int i=1;i<=n;++i) 
            for(int j=1;j<=n;++j) 
                vis[map[i][j]]=1;    
        for(int i=1;i<=n;++i) if(vis[i]) printf("%d ",i),num++;
        if(!num) puts("No important cities.");
        return 0;
    }
  • 相关阅读:
    java表达式中运算符优先级
    数据库建表规则
    linux 安装java环境
    springboot指定端口的三种方式
    服务器监控
    Dubbo 的配置主要分为三大类
    oracle数值函数 abs()、 ceil()、 cos()、 cosh()
    linux基础命令总结
    redis+sentinel集群部署
    centos7制作本地yum源
  • 原文地址:https://www.cnblogs.com/sssy/p/8612840.html
Copyright © 2011-2022 走看看