比赛 不平凡的世界 评测结果 WWAWWWTTTT
题目名称 不平凡的引线 最终得分 10
用户昵称 asddddd 运行时间 4.022 s
代码语言 C++ 内存使用 1.26 MiB
提交时间 2015-11-05 10:25:18
显示代码纯文本
//
//  main.cpp
//  firelead
//
//  Created by Qing Liu on 15/11/5.
//  Copyright © 2015年 Qing Liu. All rights reserved.
//

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
#define maxn 110000
using namespace std;
struct edge{
    int to;
    double cost;
    int rev;
};
bool vis[maxn];
vector<edge>G[maxn];
int du[maxn];
void addedge(int from,int to,double cost){
    G[from].push_back((edge){to,cost,(int)G[to].size()});
    G[to].push_back((edge){from,cost,(int)G[from].size()-1});
    du[from]++;du[to]++;
}
int main() {
    freopen("firelead.in", "r", stdin);
    freopen("firelead.out", "w", stdout);
    double ans=0;
    int n;
    cin>>n;
    for (int i=0; i<n; i++) {
        int from,to,cost;
        cin>>from>>to>>cost;
        addedge(from, to, cost);
    }
    queue<int>que[2];
    int t=0;
    for (int i=1; i<=n+1; i++) {
        if (du[i]==1) {
            que[t%2].push(i);
        }
    }
    while (!que[t%2].empty()) {
        bool update=0;
        while (!que[t%2].empty()) {
            int k=que[t%2].front();
            que[t%2].pop();
            bool push=0;
            for (int i=0; i<G[k].size(); i++) {
                edge &e=G[k][i];
                if (e.cost!=0) {
                    e.cost-=0.5;
                    G[e.to][e.rev].cost-=0.5;
                }
                else
                    continue;
                update=1;
                if (e.cost==0) {
                    if (!vis[e.to]) {
                        vis[e.to]=1;
                        que[(t+1)%2].push(e.to);
                    }
                    continue;
                }
                push=1;
            }
            if (push) {
                que[(t+1)%2].push(k);
            }
        }
        if (update) {
            ans+=0.5;
        }
        t++;
    }
    cout<<ans;
    return 0;
}