TLE100分求调教!:))૮ o̴̶̷᷄ ·̫ o̴̶̷̥᷅ ა
查看原帖
TLE100分求调教!:))૮ o̴̶̷᷄ ·̫ o̴̶̷̥᷅ ა
1083533
jamig楼主2025/7/1 22:04
#include <bits/stdc++.h>
#define PII pair<int, int>
using namespace std;

const int N = 1e5 + 5, M = 3e5 + 5;

int h[N], e[M], ne[M], w[M], idx;
vector<pair<int, int>> ed[N];
long long dis[N];
int cnt[N];
bool vis[N];
int n, m;

void add(int a, int b, int t)
{
    // ed[a].push_back({b, w});
    e[idx] = b, w[idx] = t, ne[idx] = h[a], h[a] = idx, idx ++ ;
}
bool spfa()
{
    stack<int> que;
    memset(dis, -0x3f, sizeof dis);
    dis[0] = 0; vis[0] = true; que.push(0);
    
    while(!que.empty()){
        int u = que.top(); que.pop(); vis[u] = false;
        for(int i = h[u]; i != -1; i = ne[i]){
            int v = e[i], k = w[i];
            if(dis[v] < dis[u] + k){
                dis[v] = dis[u] + k;
                cnt[v] = cnt[u] + 1;
                if(cnt[v] > n) return false;
                if(!vis[v]){
                    vis[v] = true;
                    que.push(v);
                }
            }
        }
    }
    return true;
}
int main()
{
    cin >> n >> m;
    memset(h, -1, sizeof h);
    for(int i = 1; i <= m; i ++ ){
        int op, x, y; cin >> op >> x >> y;
        if(op == 1) add(x, y, 0), add(y, x, 0);
        if(op == 2) add(x, y, 1);
        if(op == 3) add(y, x, 0);
        if(op == 4) add(y, x, 1);
        if(op == 5) add(x, y, 0);
    }
    for(int i = 1; i <= n; i ++ ) add(0, i, 1);
    if(!spfa()) cout << -1;
    else{
        long long res = 0;
        for(int i = 1; i <= n; i ++ ){
            res += dis[i];
        }
        cout << res;
    }
    return 0;
}
2025/7/1 22:04
加载中...