比赛 4043级2023省选模拟赛2 评测结果 AAAATAAAAA
题目名称 糖果 最终得分 90
用户昵称 yrtiop 运行时间 1.095 s
代码语言 C++ 内存使用 5.85 MiB
提交时间 2023-03-22 19:54:56
显示代码纯文本
#include <bits/stdc++.h>
#define pb emplace_back
using pii = std::pair<int,int>;

const int maxn = 1e5 + 5;
std::vector<pii> G[maxn];
int n,m,dis[maxn],num[maxn];
std::queue<int> q;
bool vis[maxn];

bool SPFA(int s) {
    memset(dis , -0x3f , sizeof(dis));
    vis[s] = true;
    dis[s] = 1;
    q.emplace(s);
    while(!q.empty()) {
        int u = q.front();
        q.pop();
        vis[u] = false;
        for(auto& [v , w] : G[u])
            if(dis[v] < dis[u] + w) {
                dis[v] = dis[u] + w;
                ++ num[v];
                if(num[v] > n)
                    return false;
                if(!vis[v]) {
                    q.emplace(v);
                    vis[v] = true;
                }
            }
    }
    return true;
}

int main() {
	freopen("tangguo.in","r",stdin);
	freopen("tangguo.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i = 1;i <= m;++ i) {
        int op,u,v;
        scanf("%d %d %d",&op,&u,&v);
        switch(op) {
            case 1 : {
                G[u].pb(v , 0);
                G[v].pb(u , 0);
                break ;
            }
            case 2 : {
                G[u].pb(v , 1);
                break ;
            }
            case 3 : {
                G[v].pb(u , 0);
                break ;
            }
            case 4 : {
                G[v].pb(u , 1);
                break ;
            }
            case 5 : {
                G[u].pb(v , 0);
                break ;
            }
        }
    }
    for(int i = 1;i <= n;++ i)
        G[0].pb(i , 0);
    if(!SPFA(0)) {
        puts("-1");
        return 0;
    }
    long long ans = 0;
    for(int i = 1;i <= n;++ i)
        ans += dis[i];
    printf("%lld\n",ans);
    return 0;
}