Re: [闲聊] 每日leetcode

楼主: oin1104 (是oin的说)   2024-07-28 17:13:30
题目:
有点难理解
给你一张图
有n个节点 还有一堆路径
每个路径要走的时间都是time
每隔change秒
红绿灯会变号
红灯的时候你不能出发
但是已经在走的人可以抵达
请问第二短到达第n个节点的时间是什么
思路:
想很久
然后跑去看提示
知道可以直接用bfs来找每个节点
然后因为每个路径都花一样时间
所以所以可以用queue塞
反正同节点后面出现的一定比较大
因为 就
bfs
对ㄚ
然后要全部记起来
找第二大的
怎么找
细节还是不知道怎么做
偷看一下
用阵列第i格纪录
一定要强制比较小
才可以放进去
然后同时增加visited
超过两次visited 是不可以的
然后同时还有处理红灯的问题
就是看当时是什么灯
红灯 -> 加到红灯结束
绿灯 -> 屁眼
这题有点复杂
还有一堆小鸡巴细节
建议不懂的去看yt比较快
有没有可爱的女孩子可以跟我交往
```cpp
class Solution {
public:
int secondMinimum(int n, vector<vector<int>>& edges, int time, int change)
{
int len = edges.size();
unordered_map<int,vector<int>> save;
for(int i = 0 ; i < len ; i ++)
{
save[edges[i][0]].push_back(edges[i][1]);
save[edges[i][1]].push_back(edges[i][0]);
}
queue<pair<int,int>> paper;
vector<int> visited(n+1,0);
vector<int> all (n+1,-1);
all[1]=-1;
paper.push({1,0});
int curtime = 0;
while(!paper.empty())
{
pair<int,int> now = paper.front();
paper.pop();
if((now.second%(change*2)) >= change)
{
now.second = now.second + (change*2) - (now.second%(change*2));
}
for(int k : save[now.first])
{
if(visited[k] <2 && all[k]<now.second+time)
{
all[k]=now.second+time;
visited[k]++;
paper.push({k,now.second+time});
}
}
}
return all[n];
}
};
```
作者: mrsonic (typeB)   2024-07-28 17:16:00
写爽没
楼主: oin1104 (是oin的说)   2024-07-28 17:16:00
管好你自己
作者: sustainer123 (caster)   2024-07-28 17:23:00
大师
作者: SydLrio (狂岚嘴砲)   2024-07-28 17:37:00
你有什么用
作者: JIWP (JIWP)   2024-07-28 17:48:00
我好崇拜你
作者: DJYOMIYAHINA (通通打死)   2024-07-28 17:55:00
法国我

Links booklink

Contact Us: admin [ a t ] ucptt.com