博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu P3275 糖果
阅读量:6106 次
发布时间:2019-06-21

本文共 1298 字,大约阅读时间需要 4 分钟。

超级源点的边要建成1。

一定要跑最长路啊啊啊
最后输出的是累加
还有e数组一定要足够大QwQ
还有这个2和4的特判
另外我这题代码写得很丑陋
将就着吧

#include
#include
#include
#include
using namespace std;int n,k,hh[100005],dis[100006],vis[100005],head[100005],cnt;struct edge{ int v,w,next;}e[5000005];inline void add(int u,int v,int w){ e[++cnt].v=v; e[cnt].w=w; e[cnt].next=head[u]; head[u]=cnt;}inline void spfa(){ queue
q; q.push(0); dis[0]=0; vis[0]=1; while(!q.empty()){ int u=q.front(); vis[u]=0; q.pop(); for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].v; if(dis[v]
n){ printf("-1\n"); exit(0); } } } } }}int main (){ memset(dis,-0x3f,sizeof(dis)); memset(head,-1,sizeof(head)); scanf("%d%d",&n,&k); for(int i=n;i>=1;i--){ add(0,i,1); } for(int i=1;i<=k;i++){ int x,a,b; scanf("%d%d%d",&x,&a,&b); if(x==1){ add(a,b,0); add(b,a,0); } else if(x==2){ add(a,b,1);if(a==b){printf("-1\n");return 0;}//<= } else if(x==3){ add(b,a,0); } else if(x==4){ add(b,a,1);if(a==b){printf("-1\n");return 0;} } else if(x==5){ add(a,b,0); } } spfa(); long long ans=0; for(int i=1;i<=n;i++)ans+=dis[i]; printf("%lld\n",ans);}

转载于:https://www.cnblogs.com/Y15BeTa/p/Luogu3275.html

你可能感兴趣的文章
Windows SFTP 的安装
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>