thảo luận Leetcode + Codeforces, Competitive programming contest. Đường tới Guardian + Candidate Master.

  • Người tạo chủ đề Người tạo chủ đề freedom.9
  • Ngày bắt đầu Ngày bắt đầu
Biweekly lên 300 rank, Weekly lên 200 rank, rank dưới 2k cheat nhiều thế nhỉ
1Gee5Be.gif
 
Ơ Đm Q3 sao ko cần quan tâm tới cái threshold lúc binary search vậy các fen?
Mình làm bisearch bug chỗ cái threshold mà đm đọc solution tụi top éo cần threshold check? lừa à
 
Nay bài cuối nghĩ ra cách dùng deque, đang implement mà hết giờ, ko thì top100 rồi :(.
Câu 3 đúng kiều gài làm mất time vãi
 
Cái điều kiện threshold lừa gà rồi, mẹ nó vì nếu reachable từ node 0 mà thoả mãn thì chỉ cần 1 cạnh là được.
Ngồi loay hoay mãi dốt thật =((
 
Kém thật, giải chưa đến 30' là xong 2 bài rồi mà bài 3 thì đọc chưa có ý tưởng gì lắm nên chuyển qua bài 4, bài 4 nghĩ được ra tìm max trong đoạn tịnh tiến để check sub l,r thỏa mãn rồi cộng số sub trong sub l,r mà bị overcounted, ngồi loay hoay mãi chẳng xong :(

1736655485913.png


Phải cày nhiều thôi chứ yếu kém quá =((
 
Dạo này ko học nhiều toàn 1 2Q Gang chán quá nhỉ. Đợt tới chắc ko có thời gian học nữa rồi =((
 
Bài 3 Djikstra cơ bản vậy mà sáng vẽ ngược lại cái đồ thị để check reachable to O xong cái ngáo luôn, tưởng threshold nó ảnh hưởng đến kết quả (do xét trên cái đồ thị ngược - nên nhìn lộn tưởng bỏ cạnh có trọng số lớn sẽ làm cho đỉnh u không đi được từ 0) xong cái ngồi suy nghĩ thấy lằng nhằng quá nên chuyển qua bài 4, bài 4 thì éo làm được.
Chiều ngồi vẽ ra giải lại lại mới thấy mình ngu, cay thiệt =((

C++:
class Solution {
public:
    int minMaxWeight(int n, vector<vector<int>>& edges, int threshold) {
        vector<vector<pair<int, int>>> gr(n + 1);

        for (auto &vct : edges) {
            int u = vct[0];
            int v = vct[1];
            int w = vct[2];

            gr[v].push_back({u, w});
        }

        priority_queue<pair<int, int>> pq;
        pq.push({0, 0});

        vector<int> dist(n + 1, 1e9);
        while (!pq.empty()) {
            auto [cur_w, u] = pq.top();
            cur_w = -cur_w;
            pq.pop();

            if (cur_w > dist[u]) continue;

            for (auto &[v, w] : gr[u]) {
                int new_w = min(dist[v], max(w, cur_w));
                if (dist[v] > new_w) {
                    dist[v] = new_w;
                    pq.push({-dist[v], v});
                }
            }
        }

        int ans = 0;
        for (int i=1; i<n; i++) {
            if (dist[i] == 1e9) return -1;
            ans = max(ans, dist[i]);
        }

        return ans;
        
    }
};
 

Thống kê chủ đề

Ngày tạo
freedom.9,
Người trả lời cuối
deple20k,
Trả lời
1.686
Lượt xem
107.010
Quay lại
Lên đầu trang