大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。
但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, 老师需要满足小朋友们的 K 个要求。
幼儿园的糖果总是有限的,老师想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。
输入格式
输入的第一行是两个整数 N,K。
接下来 K 行,表示分配糖果时需要满足的关系,每行 3 个数字 X,A,B。
如果 X=1.表示第 A 个小朋友分到的糖果必须和第 B 个小朋友分到的糖果一样多。
如果 X=2,表示第 A 个小朋友分到的糖果必须少于第 B 个小朋友分到的糖果。
如果 X=3,表示第 A 个小朋友分到的糖果必须不少于第 B 个小朋友分到的糖果。
如果 X=4,表示第 A 个小朋友分到的糖果必须多于第 B 个小朋友分到的糖果。
如果 X=5,表示第 A 个小朋友分到的糖果必须不多于第 B 个小朋友分到的糖果。
小朋友编号从 1 到 N。
输出格式
输出一行,表示老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出 −1。
数据范围
1≤N<105,
1≤K≤105,
1≤X≤5,
1≤A,B≤N
输入样例:
5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
输出样例:
11
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int M = 3e5 + 10;
const int INF = 0x3f3f3f3f;
typedef long long ll;
struct Edge{
int v,next,w;
}edge[M];
int head[N],cnt;
int s,e;
int n,m;
int q[N],hh = 0,tt = 0;
int dist[N],c[N];
bool vis[N];
void add(int u,int v,int w){
edge[cnt].v = v;
edge[cnt].w = w;
edge[cnt].next = head[u];
head[u] = cnt ++;
}
ll spfa(){
memset(dist,-INF,sizeof dist);
dist[0] = 0,q[tt ++] = 0,vis[0] = true;
c[0] = 0;
while(hh < tt){
int t = q[-- tt];
vis[t] = false;
for(int i = head[t];~i;i =edge[i].next){
int v = edge[i].v,w = edge[i].w;
if(dist[v] < dist[t] + w){
dist[v] = dist[t] + w;
c[v] = c[t] + 1;
if(c[v] >= n + 1)return -1;
if(!vis[v]){
vis[v] = true;
q[tt ++] = v;
}
}
}
}
ll ans = 0;
for(int i = 1;i <= n;i ++)ans += dist[i];
return ans;
}
int main(){
scanf("%d %d",&n,&m);
int x,y;
int c;
memset(head,-1,sizeof head);
for(int i = 0;i < m;i ++){
scanf("%d %d %d",&c,&x,&y);
if(c == 1)add(x,y,0),add(y,x,0);
if(c == 2)add(x,y,1);
if(c == 3)add(y,x,0);
if(c == 4)add(y,x,1);
if(c == 5)add(x,y,0);
}
for(int i = 1;i <= n;i ++){
add(0,i,1);
}
ll ans = spfa();
printf("%lld",ans);
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168579.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...