记录编号 252200 评测结果 AAAAAAAAAA
题目名称 图的询问 最终得分 100
用户昵称 Gravatarasddddd 是否通过 通过
代码语言 C++ 运行时间 1.721 s
提交时间 2016-04-19 19:37:53 内存使用 3.09 MiB
显示代码纯文本
    //
    // main.cpp
    // tudexunwen
    //
    // Created by Qing Liu on 16/4/19.
    // Copyright 漏 2016骞 Qing Liu. All rights reserved.
    //
     
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #define maxn 55005
    using namespace std;
    struct edge{
    int from,to,cost;
    };
    struct edg{
    int to,cost;
    };
    vector<edg>G[maxn];
    int pa[maxn],val[maxn];
    int _find(int a){
    if(pa[a]==a){
    return a;
    }
    else return _find(pa[a]);
    }
    edge haha[30005];
    bool cmp1(const edge &a ,const edge &b){
    return a.cost<b.cost;
    }
    struct fuck{
    int to,id;
    };
    struct hah{
    int a,b;
    };
    hah que[maxn];
    vector<fuck>ask_[maxn];
    int ans[maxn],_ansestor[maxn],par[maxn];
    bool vis[maxn];
    void tarjan(int x,int paa){
    for(int i=0;i<G[x].size();i++){
    const edg &e=G[x][i];
    if(e.to!=paa){
    par[e.to]=x;
    val[e.to]=e.cost;
    tarjan(e.to,x);
    int ppa=_find(e.to),ppb=_find(x);
    pa[ppa]=ppb;
    _ansestor[_find(x)]=x;
    }
    }
    vis[x]=1;
    for (int i=0; i<ask_[x].size(); i++) {
    fuck &ZLX=ask_[x][i];
    if(vis[ZLX.to]){
    if(ans[ZLX.id])
    continue;
    ans[ZLX.id]=_ansestor[_find(ZLX.to)];
    }
    }
    }
    void init(){
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=1;i<=m;i++){
    pa[i]=i;
    edge &a=haha[i];
    cin>>a.from>>a.to>>a.cost;
    }
    sort(haha+1, haha+m+1, cmp1);
    for(int i=1;i<=m;i++){
    int from=haha[i].from,to=haha[i].to;
    int ppa=_find(from),ppb=_find(to);
    if(ppa!=ppb){
    pa[ppa]=pa[ppb];
    //cout<<from<<" "<<to<<endl;
    G[from].push_back((edg){to,haha[i].cost});
    G[to].push_back((edg){from,haha[i].cost});
    }
    }
    for (int i=1; i<=k; i++) {
    int from,to;
    cin>>from>>to;
    que[i].a=from,que[i].b=to;
    ask_[from].push_back((fuck){to,i});
    ask_[to].push_back((fuck){from,i});
    }
    for (int i=1; i<=n; i++) {
    pa[i]=i;
    _ansestor[i]=i;
    }
    tarjan(1,1);
    for (int i=1;i<=k;i++) {
    int k=ans[i];
    int anss=-999999999;
    int l=que[i].a;
    int r=que[i].b;
    while(l!=k){
    anss=max(anss, val[l]);
    l=par[l];
    }
    while (r!=k) {
    anss=max(anss, val[r]);
    r=par[r];
    }
    ans[i]=anss;
    }
    for (int i=1; i<=k; i++) {
    cout<<ans[i]<<endl;
    }
    }
    int main(int argc, const char * argv[]) {
    freopen("heatwave.in", "r", stdin);
    freopen("heatwave.out", "w", stdout);
    init();
    return 0;
    }