比赛 |
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;
}