• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
AC_Artist.zig_zag
然而我依然在补题、
博客园    首页    新随笔    联系   管理    订阅  订阅

bzoj 2330 糖果

  恶心死我了,调试了3个小时,居然是图连错了,一直在搞第5个点的TLE,原因大概是跑最长路的时候建了st点,然后那个点貌似是个大环,然后就无限第跑个不停......一晚上啊!!!
不过差分约束还是比较好理解的,把不等关系变成三角不等式的形式,可以跑最长路也可以跑最短路,只不过连边不太一样罢了,跑之前自己想好就行了。
不想在说什么了,恶心!
View Code
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #define maxn 2200000
 7 #define inf 0x3f3f3f3f
 8 using namespace std;
 9 
10 struct et
11 {
12         int s,t,next;
13         long long val;
14 }e[maxn];
15 int q[maxn*5],c[maxn],fir[maxn];
16 bool inque[maxn];
17 long long d[maxn];
18 int n,m,tot,st;
19 
20 bool spfa()
21 {
22         //for (int i=1;i<=n;i++) d[i]=-inf,c[i]=0,inque[i]=0;
23         //q[1]=st; inque[st]=1; d[st]=0;
24         for (int i=1;i<=n;i++) q[i]=i,d[i]=1,inque[i]=1,c[i]=1;
25         int head=0,tail=n;
26         while (head!=tail)
27         {
28                 head=(head+1)%(n+1);
29                 int now=q[head];
30                 for (int j=fir[now];j;j=e[j].next)
31                 {
32                         int k=e[j].t;
33                         if (d[now]+e[j].val>d[k])
34                         {
35                                 d[k]=d[now]+e[j].val;
36                                 if (++c[k]>=n) return 0;
37                                 if (!inque[k])
38                                 {
39                                         tail=(tail+1)%(n+1);
40                                         q[tail]=k;
41                                         inque[k]=1;
42                                 }
43                         }
44                 }
45         inque[now]=0;   
46         }
47         return 1;
48 }
49         
50 void add(int x,int y,int z)
51 {
52         e[++tot].s=x; e[tot].t=y; e[tot].val=z;
53         e[tot].next=fir[x]; fir[x]=tot;
54 }
55 
56 int main()
57 {
58         //freopen("candy.in","r",stdin);
59         scanf("%d %d",&n,&m);
60         st=n+1;
61         //for (int i=1;i<=n;i++) add(st,i,0);
62         int x,y,z;
63         for (int i=1;i<=m;i++)
64         {
65                 scanf("%d %d %d",&x,&y,&z);
66                 if (x==1) add(y,z,0),add(z,y,0);
67                 else
68                 if (x==2)
69                 {
70                         if (y==z) {printf("%d\n",-1) ; return 0;}
71                         add(y,z,1);
72                 }
73                 else
74                 if (x==3) add(z,y,0);
75                 else
76                 if (x==4) 
77                 {
78                         if (y==z) {printf("%d\n",-1) ; return 0;}
79                         add(z,y,1);
80                 }
81                 else
82                 if (x==5) add(y,z,0);           
83         }
84         
85         long long  ans=0;
86         if (spfa()) 
87         {
88                 for (int i=1;i<=n;i++) ans+=d[i];
89                 printf("%lld\n",ans);
90         }
91         else printf("%d\n",-1);
92         return 0;
93 }

 

AC without art, no better than WA !
posted @ 2013-03-19 22:55  Zig_zag  阅读(268)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3