zoukankan      html  css  js  c++  java
  • uva 1161                图论       无从下手。。。

    uva 10938              LCA && RMQ。。

    uva 10246              应该可以用变形floyd预处理,然后O(1)回答询问。WA代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<vector>
    #include<cstdlib>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<stack>
    
    using namespace std;
    
    #define LL long long
    #define UINT unsigned int
    #define MAX_INT 0x7fffffff
    #define cint const int
    
    #define MAXN 100
    #define INF 1000000000
    
    int n, m, f[MAXN];
    int maxcst[MAXN][MAXN], w[MAXN][MAXN];
    LL d[MAXN][MAXN];
    
    void floyd(){
        int i, j, k;
    
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++){
                maxcst[i][j]=maxcst[j][i]=max(f[i], f[j]);
                d[i][j]=d[j][i]=w[i][j]+maxcst[i][j];
            }
    
        for(k=1; k<=n; k++)
            for(i=1; i<=n; i++)
                for(j=1; j<=n; j++){
                    int tmc = max(maxcst[i][k], maxcst[k][j]);
                    int t = d[i][k] + d[k][j] - min(maxcst[i][k], maxcst[k][j]);
                    if(t < d[i][j]){
                        d[i][j]=t;
                        maxcst[i][j]=tmc;
                    }
                }
    }
    
    int main(){
    //    freopen("C:\Users\Administrator\Desktop\in.txt","r",stdin);
        int q, kase=1;
        while(scanf(" %d %d %d", &n, &m, &q)==3 && (n || m || q)){
            int i, u, v, tw;
            for(i=1; i<=n; i++){
                scanf(" %d", f+i);
                fill_n(w[i]+1, n, INF);
            }
            for(i=1; i<=n; i++) w[i][i]=0;
            for(i=0; i<m; i++){
                scanf(" %d %d %d", &u, &v, &tw);
                if(u!=v) w[u][v]=w[v][u]=min(w[u][v], tw);
            }
            floyd();
            if(kase>1) printf("
    ");
            printf("Case #%d
    ", kase++);
            while(q--){
                scanf(" %d %d", &u, &v);
                if(d[u][v]>=INF) printf("-1
    ");
                else printf("%lld
    ", d[u][v]);
            }
        }
        return 0;
    }
    

     uva 1357 交了一发submission error的递归dfs。。。非递归的还不知道写。。。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<vector>
    #include<cstdlib>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<stack>
    
    using namespace std;
    
    #define LL long long
    #define UINT unsigned int
    #define MAX_INT 0x7fffffff
    #define cint const int
    
    #define MAXN 20000002
    #define MAXM MAXN
    #pragma comment(linker,"/STACK:102400000,102400000")
    
    struct edge{
        int u, v, nxt;
    }e[MAXM];
    int h[MAXN], cc, n, tsp;
    
    int pre[MAXN], post[MAXN];
    void dfs(int u){
        pre[u] = tsp++;
        for(int i=h[u]; i!=-1; i=e[i].nxt)
            dfs(e[i].v);
        post[u] = tsp++;
    }
            //unfinished
    void sim_dfs(int u){
        stack<int> s;
        s.push(u);
        while(!s.empty()){
            u = s.top();
            pre[u] = tsp++;
            for(int i=h[u]; i!=-1; i=e[i].nxt)
                s.push(e[i].v);
            post
        }
    }
    
    int main(){
    //    freopen("C:\Users\Administrator\Desktop\in.txt","r",stdin);
        int T, kase=1;
        scanf(" %d", &T);
        while(T--){
            int i, u, c, cnt=1;
            scanf(" %d", &n);
            fill_n(h, n, -1);   cc=0;
            for(i=0; i<n; i++){
                scanf(" %d", &c);
                while(c--){
                    e[cc]=(edge){i, cnt++, h[i]};
                    h[i]=cc++;
                }
            }
            if(cnt>n) fill(h+n, h+cnt, -1);
            tsp = 0;
            dfs(0);
            scanf(" %d", &c);
            if(kase>1) printf("
    ");
            printf("Case %d:
    ", kase++);
            while(c--){
                int v;
                scanf(" %d %d", &u, &v);
                if(pre[u]<pre[v] && post[u]>post[v]) printf("Yes
    ");
                else printf("No
    ");
            }
        }
        return 0;
    }
    
  • 相关阅读:
    TCP粘包,产生的原因以及解决方案
    php判断变量是否为正整数
    php函数trim中文编码问题解决
    win10设置开机自动启动vagrant虚拟机
    Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    git push 时 fatal: Unable to create 'D:/phpStudy/WWW/green_tree/.git/index.lock': File exists.解决办法
    git push 提示 Everything up-to-date
    Allowed memory size of 134217728 bytes exhausted (tried to allocate 2 bytes)
    访问远程mysql数据库,出现报错,显示“1130
    改变网页选中文本的颜色
  • 原文地址:https://www.cnblogs.com/ramanujan/p/3360783.html
Copyright © 2011-2022 走看看