栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3263 Immaterial and Missi...

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3263 Immaterial and Missi...

#include<cstdio>#include<map>#include<queue>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<list>#include<set>#include<cmath>using namespace std;const int maxn = 1e2 + 5;const int INF = 1e9;const double eps = 1e-7;typedef unsigned long long ULL;typedef long long LL;typedef pair<int, double> P;#define fi first#define se secondmap<string, int> M;vector<P> G[maxn];int pos[20];double V[20], A[20], T[maxn][20];int sink, q, n;double C;double dist[maxn];struct Node{    int pos;    double dis;    bool operator < (const Node& e) const{        return dis > e.dis;    }};double get(int source, double ci, int from){    double v = A[source]*sqrt(ci) + V[source];    priority_queue<Node> q;    while(!q.empty())        q.pop();    for(int i = 0;i < n;i++)        dist[i] = 1e12;    dist[from] = 0;    q.push((Node){from, 0});    while(!q.empty()){        Node tem = q.top();        q.pop();        int pos = tem.pos;        double dis = tem.dis;        if(dis > dist[pos]) continue;        if(pos == sink){ return dis;        }        for(int i = 0;i < G[pos].size();i++){ P& edge = G[pos][i]; int to = edge.fi; double der = edge.se; if(dist[to] > dis+der/v+T[to][source]){     dist[to] =  dis+der/v+T[to][source];     q.push((Node){to, dist[to]}); }        }    }}bool can(double limit){    double left = C;    for(int i = 0;i < q;i++){        double l = 0, r = 1e7, ans = 1e6;        for(int c = 0;c < 100;c++){ double mid = (l+r)/2; if(limit-get(i, mid, pos[i])>eps){     ans = mid;     r = mid; } else     l = mid;        }        left -= ans;    }    if(left < eps)        return false;    return true;}int main(){    int m;    while(scanf("%d%d%d", &n, &m, &q) != EOF){        M.clear();        for(int i = 0;i < n;i++) G[i].clear();        for(int i = 0;i < n;i++){ string s; cin >> s; M[s] = i; if(s == "Hakurei_Shrine")     sink = i;        }        while(m--){ string s; cin >> s; int x = M[s]; cin >> s; int y = M[s]; double dis; cin >> dis; G[x].push_back(P(y, dis)); G[y].push_back(P(x, dis));        }        for(int i = 0;i < q;i++){ string s; cin >> s >> s >> V[i] >> A[i]; pos[i] = M[s]; for(int j = 0;j < n;j++)     cin >> T[j][i]; T[sink][i] = 0;        }        cin >> C;        double l = 0, r = 1e12;        double ans;        for(int c = 0;c < 100;c++){ double mid = (l+r)/2; if(can(mid)){     r = mid;     ans = mid; } else     l = mid;        }        printf("%.7lfn", ans);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号