zoukankan      html  css  js  c++  java
  • codevs round3 day1T2

    明明我的代码过了7个点为什么才30啊QAQ

    其实昨天写的已经快AC了。。只是那13种情况中有一种写错导致去了3个点,真是醉了。。

    然而代码还是巨丑。。。

      1 #include<bits/stdc++.h>
      2 #define inc(i,l,r) for(i=l;i<=r;i++)
      3 #define dec(i,l,r) for(i=l;i>=r;i--)
      4 #define inf 1e9
      5 #define mem(a) memset(a,0,sizeof(a))
      6 #define ll long long
      7 #define succ(x) (1<<x)
      8 #define NM 60000+5
      9 #define nm 500000
     10 using namespace std;
     11 int read(){
     12     int x=0,f=1;char ch=getchar();
     13     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
     14     while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
     15     return x*f;
     16 }
     17 struct edge{
     18     int t,v;
     19     edge *next;
     20 }e[nm],*h[NM],*_h[NM];
     21 int a[5],b[5],c[5],_x,_y,t,s,i,n,m,p,_n,f[NM];
     22 ll d[NM],d1[NM],d2[NM],_d1[NM],_d2[NM],ans[NM];
     23 bool v[NM];
     24 queue<int >q;
     25 void add(int x,int y,int v){
     26     e[++s].t=y;e[s].v=v;e[s].next=h[x];h[x]=&e[s];
     27 }
     28 void _add(int x,int y,int v){
     29     e[++s].t=y;e[s].v=v;e[s].next=_h[x];_h[x]=&e[s];
     30 }
     31 int find(int x){
     32     return f[x]==x?x:f[x]=find(f[x]);
     33 }
     34 void lca(int x){
     35     f[x]=x;
     36     for(edge *j=_h[x];j;j=j->next)
     37     if(f[j->t])
     38     ans[j->v]=min(ans[j->v],d[j->t]+d[x]-2*d[find(j->t)]);
     39     for(edge *j=h[x];j;j=j->next)
     40     if(!f[j->t]){
     41         d[j->t]=d[x]+j->v;
     42         lca(j->t);
     43         f[j->t]=x;
     44     }
     45 }
     46 void spfa(int x){
     47     mem(d);mem(v);
     48     inc(i,1,n)d[i]=inf;
     49     v[x]++;q.push(x);d[x]=0;
     50     while(!q.empty()){
     51         int t=q.front();q.pop();v[t]=false;
     52         for(edge *j=h[t];j;j=j->next)
     53         if(d[j->t]>d[t]+j->v){
     54             d[j->t]=d[t]+j->v;
     55             if(!v[j->t]){
     56                 v[j->t]++;q.push(j->t);
     57             }
     58         }
     59     }
     60 }
     61 int main(){
     62     n=read();m=read();p=read();
     63     inc(i,1,n)f[i]=i;
     64     inc(i,1,m){
     65         _x=read();_y=read();t=read();
     66         if(find(_x)==find(_y)){
     67             a[++_n]=_x;b[_n]=_y;c[_n]=t;
     68             continue;
     69         }
     70         f[find(_x)]=find(_y);
     71         add(_x,_y,t);add(_y,_x,t);
     72     }
     73     if(a[1]){
     74         spfa(a[1]);
     75         inc(i,1,n)d1[i]=d[i];
     76         spfa(b[1]);
     77         inc(i,1,n)d2[i]=d[i];
     78     }
     79     if(a[2]){
     80         spfa(a[2]);
     81         inc(i,1,n)_d1[i]=d[i];
     82         spfa(b[2]);
     83         inc(i,1,n)_d2[i]=d[i];
     84     }
     85     inc(i,1,p){
     86         _x=read();_y=read();ans[i]=inf;
     87         if(a[1]){
     88             ans[i]=d1[_x]+c[1]+d2[_y];
     89             ans[i]=min(ans[i],d2[_x]+c[1]+d1[_y]);
     90         }
     91         if(a[2]){
     92             ans[i]=min(ans[i],_d1[_x]+c[2]+_d2[_y]);
     93             ans[i]=min(ans[i],_d2[_x]+c[2]+_d1[_y]);
     94             ans[i]=min(ans[i],d1[_x]+c[1]+_d1[b[1]]+c[2]+_d2[_y]);
     95             ans[i]=min(ans[i],d1[_x]+c[1]+_d2[b[1]]+c[2]+_d1[_y]);
     96             ans[i]=min(ans[i],d2[_x]+c[1]+_d1[a[1]]+c[2]+_d2[_y]);
     97             ans[i]=min(ans[i],d2[_x]+c[1]+_d2[a[1]]+c[2]+_d1[_y]);
     98             ans[i]=min(ans[i],_d2[_x]+c[2]+d1[a[2]]+c[1]+d2[_y]);
     99             ans[i]=min(ans[i],_d2[_x]+c[2]+d2[a[2]]+c[1]+d1[_y]);
    100             ans[i]=min(ans[i],_d1[_x]+c[2]+d1[b[2]]+c[1]+d2[_y]);
    101             ans[i]=min(ans[i],_d1[_x]+c[2]+d2[b[2]]+c[1]+d1[_y]);
    102         }
    103         _add(_x,_y,i);_add(_y,_x,i);
    104     }
    105     mem(d);mem(v);mem(f);
    106     lca(1);
    107     inc(i,1,p)
    108     printf("%lld
    ",ans[i]);
    109     return 0;
    110 }
    View Code
  • 相关阅读:
    居中
    <script type="text/javascript"></script>
    移动端获取全文高度
    video
    transition animation
    移动端隐藏overflow:auto滚轮
    Vue将组件data内的数据重置
    文字刚刚刚刚刚好的居中
    小程序总结(不断更新)
    vue组件之间的传值
  • 原文地址:https://www.cnblogs.com/onlyRP/p/4855647.html
Copyright © 2011-2022 走看看