• 2019 ICPC NanChang Regional Online Contest


    有点毒的比赛。

    题目链接:https://www.jisuanke.com/contest/3870?view=challenges


    B:

    添加一个点连接所有救火点,路径设为0,就变成了跑两次dijkstra的题。

     1 /* Contest nanchang_2019_online
     2  * Problem B
     3  * Team: Make One For Us
     4  */
     5 #include <bits/stdc++.h>
     6 
     7 using namespace std;
     8 
     9 const long long int INF = 10000000000000L;
    10 
    11 struct edge {
    12     int u, v;
    13     long long int w;
    14 };
    15 
    16 struct node {
    17     int u;
    18     long long int d;
    19     bool operator < (const node &n) const {
    20         return d > n.d;
    21     }
    22 };
    23 
    24 long long int read(void) {
    25     char ch;
    26     do {
    27         ch = getchar();
    28     } while (!isdigit(ch));
    29     long long int ret = 0;
    30     while (isdigit(ch)) {
    31         ret *= 10;
    32         ret += ch - '0';
    33         ch = getchar();
    34     }
    35     return ret;
    36 }
    37 
    38 void dijkstra(vector <vector <int>> &graph, vector <edge> &edges, vector <long long int> &dis, int s) {
    39     priority_queue <node> pq;
    40     pq.push({s, dis[s] = 0});
    41     vector <int> vis(graph.size());
    42     while (!pq.empty()) {
    43         auto tmp = pq.top();
    44         pq.pop();
    45         if (vis[tmp.u]) {
    46             continue;
    47         }
    48         vis[tmp.u] = true;
    49         for (unsigned int i = 0; i < graph[tmp.u].size(); i++) {
    50             edge &e = edges[graph[tmp.u][i]];
    51             if (dis[e.v] > dis[e.u] + e.w) {
    52                 pq.push((node) {e.v, dis[e.v] = dis[e.u] + e.w});
    53             }
    54         }
    55     }
    56 }
    57 
    58 int main(void) {
    59     ios::sync_with_stdio(false);
    60     cin.tie(nullptr);
    61     int T;
    62     T = read();
    63     while (T--) {
    64         int n = read(), m = read(), s = read(), k = read(), c = read();
    65         int ptr = 0;
    66         vector <edge> edges(2 * m + k);
    67         vector <vector <int>> graph(n + 1);
    68         auto add_edge = [&] (int u, int v, long long int w) {
    69             graph[u].emplace_back(ptr);
    70             edges[ptr++] = ((edge) {u, v, w});
    71         };
    72         for (int i = 0; i < k; i++) {
    73             int v = read();
    74             add_edge(0, v, 0);
    75         }
    76         for (int i = 0; i < m; i++) {
    77             int u = read(), v = read();
    78             long long int w = read();
    79             add_edge(u, v, w);
    80             add_edge(v, u, w);
    81         }
    82 
    83         vector <long long int> dis(n + 1, INF);
    84         dijkstra(graph, edges, dis, s);
    85         auto ans_s = *max_element(dis.begin() + 1, dis.end());
    86         for (int i = 0; i <= n; i++) {
    87             dis[i] = INF;
    88         }
    89         dijkstra(graph, edges, dis, 0);
    90         auto ans_k = *max_element(dis.begin() + 1, dis.end());
    91 
    92         if (ans_k * c < ans_s) {
    93             cout << ans_k << endl;
    94         } else {
    95             cout << ans_s << endl;
    96         }
    97     }
    98     return 0;
    99 }
    View Code

    C:

    一开始以为是莫队后来发现不对,就以为是字符串乱搞,结果是线段树维护dp矩阵区间合并。原题是Codeforces goodbye 2016 E。(tourist都没做出来的题这么多人做出来,有点假啊)

    E:

    一个n有4e7的约瑟夫问题居然是模拟,死都不信,垃圾数据。

    G:

    签到。

     1 /* basic header */
     2 #include <bits/stdc++.h>
     3 /* define */
     4 #define ll long long
     5 #define dou double
     6 #define pb emplace_back
     7 #define mp make_pair
     8 #define sot(a,b) sort(a+1,a+1+b)
     9 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    10 #define rep0(i,a,b) for(int i=a;i<b;++i)
    11 #define eps 1e-8
    12 #define int_inf 0x3f3f3f3f
    13 #define ll_inf 0x7f7f7f7f7f7f7f7f
    14 #define lson (curpos<<1)
    15 #define rson (curpos<<1|1)
    16 /* namespace */
    17 using namespace std;
    18 /* header end */
    19 
    20 int t;
    21 
    22 int main() {
    23     scanf("%d", &t);
    24     while (t--) {
    25         ll n; scanf("%lld", &n);
    26         if (n == 1) puts("18000");
    27         else puts("0");
    28     }
    29     return 0;
    30 }
    View Code

    H:

    二分矩阵快速幂+记忆化。

     1 #include<bits/stdc++.h>
     2 typedef long long ull;
     3 
     4 using namespace std;
     5 
     6 const int maxn = 1e6 + 10;
     7 const ull mod = 998244353;
     8 
     9 struct Matrix {
    10     ull mem[2][2];
    11     void init() {
    12         memset(mem, 0, sizeof(mem));
    13     }
    14     Matrix operator*(const Matrix &rhs)const {
    15         Matrix ret; ret.init();
    16         for (int i = 0; i < 2; i++) {
    17             for (int j = 0; j < 2; j++) {
    18                 for (int k = 0; k < 2; k++)
    19                     ret.mem[i][j] += mem[i][k] * rhs.mem[k][j];
    20                 ret.mem[i][j] %= mod;
    21             }
    22         }
    23         return ret;
    24     }
    25 } mAns, mBase;
    26 unordered_map<ull, Matrix> M;
    27 
    28 int tot = 0;
    29 Matrix solve(ull n) {
    30     if (M.count(n)) return M[n];
    31     if (n == 1) {
    32         M[n] = mBase;
    33         return mBase;
    34     }
    35     Matrix ret = solve(n / 2ull);
    36     ret = ret * ret;
    37     if (n % 2ull == 1ull) ret = ret * mBase;
    38     return M[n] = ret;
    39 }
    40 
    41 int main() {
    42     ull q, n;
    43     cin >> q >> n;
    44     ull lastans = 0ull;
    45     ull ans = 0;
    46     for (int i = 1ull; i <= q; i++) {
    47         mAns.mem[0][0] = 1, mAns.mem[0][1] = 0;
    48         mBase.mem[0][0] = 3, mBase.mem[0][1] = 1, mBase.mem[1][0] = 2;
    49         if (i >= 2ull) n = (n ^ (ans * ans));
    50         Matrix val = solve(n % (mod - 1));
    51         ans = val.mem[0][1];
    52         lastans = (lastans ^ ans);
    53     }
    54     cout << lastans << endl;
    55     return 0;
    56 }
    View Code

    L:

    三位偏序,cdq分治。待补。

  • 相关阅读:
    easyui
    H+ Se7en WebUI
    WEB IM
    PowerDesigner 导出 Excel
    SSO跨域 CodeProject
    ICU 是一种说不出的痛啊
    C#的Main(String[] args)参数输入问题
    C# TabControl标签的隐藏
    在foreach的判断条件里执行方法会有效率问题吗?
    C#编程命名规范推荐
  • 原文地址:https://www.cnblogs.com/JHSeng/p/11490112.html
Copyright © 2020-2023  润新知