C、 Tachibana Kanade Loves Review

最小生成树裸题,考虑多加入一个虚拟节点,这个点到其他点的距离就是学会那个题所花费的时间。

https://ac.nowcoder.com/acm/contest/548/C

Code:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct node
{
    int in;
    int to;
    int w;
}edge[6000005];
int que[1000005], tt[1000005], cnt;
namespace IO {
    char buf[1 << 15], *S, *T;
    inline char gc() {
        if (S == T) {
            T = (S = buf) + fread(buf, 1, 1 << 15, stdin);
            if (S == T)return EOF;
        }
        return *S++;
    }
    inline int read() {
        int x; bool f; char c;
        for (f = 0; (c = gc()) < '0' || c > '9'; f = c == '-');
        for (x = c ^ '0'; (c = gc()) >= '0' && c <= '9'; x = (x << 3) + (x << 1) + (c ^ '0'));
        return f ? -x : x;
    }
    inline long long readll() {
        long long x; bool f; char c;
        for (f = 0; (c = gc()) < '0' || c > '9'; f = c == '-');
        for (x = c ^ '0'; (c = gc()) >= '0' && c <= '9'; x = (x << 3) + (x << 1) + (c ^ '0'));
        return f ? -x : x;
    }
}
using IO::read;
using IO::readll;
int getf(int k)
{
    return que[k] == k ? k : que[k] = getf(que[k]);
}
void add(int a, int b, int c)
{
    edge[cnt++] = node{ a,b,c };
}
int main()
{
    int n, m, k, a, b, c;
    ll t;
    n = read(); m = read(); k = read(); t = readll();
    for (int i = 1; i <= n + 1; i++)
        que[i] = i;
    for (int i = 1; i <= n; i++)
        tt[i] = read();
    while (k--)
    {
        a = read();
        tt[a] = 0;
    }
    for (int i = 1; i <= n; i++)
        add(i, n + 1, tt[i]);
    while (m--)
    {
        a = read();
        b = read();
        c = read();
        add(a, b, c);
    }
    sort(edge, edge + cnt, [](node q, node w) {
        return q.w < w.w;
    });
    ll ans = 0;
    for (int i = 0; i < cnt; i++)
    {
        int q = getf(edge[i].in), w = getf(edge[i].to);
        if (q != w)
        {
            que[q] = w;
            ans += edge[i].w;
        }
    }
    puts(ans <= t ? "Yes" : "No");
}

 

全部评论

相关推荐

05-04 09:38
已编辑
门头沟学院 引擎开发
个人9本海硕,本硕期间一直在投游戏相关实习/校招,岗位由客户端-&gt;引擎-&gt;TA-&gt;AIGC。最终目标肯定是独游制作人,所以程序策划美术都点了些,感觉也没谁了。值此春招末尾总结下技术向校招要点,算是回馈牛客社区了。也附上我的Github和个人博客,欢迎各种交流讨论。&nbsp;前言&nbsp;首先是个人惯例的劝退游戏行业。参见缅怀故人&nbsp;和永远有多远&nbsp;,相比于互联网,游戏薪资大概相当但要求更高,加班严重且更为局限。如果你只是带着一腔热情想入这行,建议先找个日常实习了解下真实的游戏行业再做选择。&nbsp;准备&nbsp;当然,在你决定踏出这步后,第一步就是准备相关的笔试面试。这里先建议找到你感兴趣的公司岗位的JD,然后...
牛客28967172...:说的还是有道理的,我校招时就拿到过网易雷火好几个顶级项目组方向的offer,基本上流程和你说的一样。 但本质还是劝退互联网的游戏方向,本质上是代价更高,而且职业生涯容错率很低,方向比较窄。 代价是众所周知的严重加班,游戏大版本赶工基本上通宵无休,甚至国庆五一都没放假是常态。 职业生涯性价比低是因为游戏行业本质上就是赢家通吃,但你要跳槽只有腾讯网易等头部,要么就是米哈游莉莉丝库洛三七等少数中厂,然后就没了,公司是断崖的少 游戏开发相比互联网方向岗位非常非常少,比如网易整个雷火也才五六百人,里面十几个工作室,招人比例非常低,其他游戏公司也是一样。 而且方向也很窄,你做引擎开发就只能跳相关,你做游戏客户端也只能跳相关(游戏客户端都算吃香的,但市场hc也非常非常少,跳槽机会更少),基本上很难转回互联网 这里对比传统互联网,大厂多的都说不过来,而且容错率很大,你做搜索方向可以跳推荐,你做推荐方向可以跳广告,要求远没有游戏行业那么严,甚至你之前干测试都能跳槽研发方向
我的求职进度条
点赞 评论 收藏
分享
自从我室友在计算机导论课上听说了“刷&nbsp;LeetCode&nbsp;是进入大厂的敲门砖”,整个人就跟走火入魔了一样。他在宿舍门口贴了一张A4纸,上面写着:“正在&nbsp;DP,请勿打扰,否则&nbsp;Time&nbsp;Limit&nbsp;Exceeded。”日记本的扉页被他用黑色水笔加粗描了三遍:“Talk&nbsp;is&nbsp;cheap.&nbsp;Show&nbsp;me&nbsp;the&nbsp;code。”连宿舍聚餐,他都要给我们讲解:“今天的座位安排可以用回溯算法解决,但为了避免栈溢出,我建议用动态规划。来,这是状态转移方程:dp[i][j]&nbsp;代表第&nbsp;i&nbsp;个人坐在第&nbsp;j&nbsp;个位置的最优解。”我让他去楼下取个快递,他不直接去,非要在门口踱步,嘴里念念有词:“这是一个图的遍历问题。从宿舍楼(root)到驿站(target&nbsp;node),我应该用&nbsp;BFS&nbsp;还是&nbsp;DFS?嗯,求最短路径,还是广度优先好。”和同学约好出去开黑,他会提前发消息:“集合点&nbsp;(x,&nbsp;y),我们俩的路径有&nbsp;k&nbsp;个交点,为了最小化时间复杂度,应该在&nbsp;(x/2,&nbsp;y/2)&nbsp;处汇合。”有一次另一个室友低血糖犯了,让他帮忙找颗糖,他居然冷静地分析道:“别急,这是一个查找问题。零食箱是无序数组,暴力查找是&nbsp;O(n)。如果按甜度排序,我就可以用二分查找,时间复杂度降到&nbsp;O(log&nbsp;n)。”他做卫生也要讲究算法效率:“拖地是典型的岛屿问题,要先把连通的污渍区块都清理掉。倒垃圾可以用双指针法,一个指针从左往右,一个从右往左,能最快匹配垃圾分类。”现在我们宿舍的画风已经完全变了,大家不聊游戏和妹子,对话都是这样的:“你&nbsp;Two&nbsp;Sum&nbsp;刷了几遍了?”“别提了,昨天遇到一道&nbsp;Hard&nbsp;题,我连暴力解都想不出来,最后只能看题解。你呢?”“我动态规划还不行,总是找不到最优子结构。今天那道接雨水给我整麻了。”……LeetCode&nbsp;真的害了我室友!!!
老六f:编程嘉豪来了
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务