zoukankan      html  css  js  c++  java
  • 布局

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<vector>
     8 #include<map>
     9 #include<set>
    10 #include<stack>
    11 using namespace std;
    12 int read(){
    13   int x=0,f=1;char s=getchar();
    14   while(s<'0'||s>'9'){if(s=='-') f=-1;s=getchar();}
    15   while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
    16   return x*f;
    17 }
    18 queue<int>q;
    19 const int maxn=1007;
    20 const int maxm=20007;
    21 const int INF=0x7f7f7f7f;
    22 int n,ml,md,num;
    23 int head[maxn],cnt[maxn],d[maxn];
    24 bool flag;
    25 bool inq[maxn];
    26 struct Edge{
    27   int nxt,to,dis;
    28 }edge[maxm<<1];
    29 void add(int from,int to,int dis){
    30   edge[++num].nxt=head[from];
    31   edge[num].to=to;
    32   edge[num].dis=dis;
    33   head[from]=num;
    34 }
    35 void spfa(int x){
    36   memset(inq,false,sizeof(inq));
    37   memset(d,INF,sizeof(d));
    38   memset(cnt,0,sizeof(cnt));
    39   d[x]=0;inq[x]=true;q.push(x);
    40   while(!q.empty()){
    41     int u=q.front();inq[u]=false;q.pop();
    42     for(int i=head[u];i;i=edge[i].nxt){
    43       int v=edge[i].to;
    44       if(d[v]>d[u]+edge[i].dis){
    45         d[v]=d[u]+edge[i].dis;
    46         if(!inq[v]){
    47           cnt[v]++;inq[v]=true;q.push(v);
    48           if(cnt[v]>n){
    49             cout<<-1<<endl;flag=true;return;
    50           }
    51         } 
    52       }
    53     }
    54   }
    55 }
    56 int main(){
    57   //freopen("a.in","r",stdin);
    58   n=read();ml=read();md=read();
    59   for(int i=1;i<=ml;i++){
    60     int u,v,w;u=read();v=read();w=read();
    61     add(u,v,w);
    62   }
    63   for(int i=1;i<=md;i++){
    64     int u,v,w;u=read();v=read();w=read();
    65     add(v,u,-w);
    66   }
    67   for(int i=1;i<=n;i++) add(0,i,0);
    68   for(int i=2;i<=n;i++) add(i,i-1,0);
    69   spfa(0);
    70   if(!flag){
    71     spfa(1);
    72     if(d[n]==INF) cout<<-2<<endl;
    73     else cout<<d[n]<<endl;
    74   }
    75   return 0;
    76 }
  • 相关阅读:
    git添加本地项目到git
    GitLab项目迁移到Gerrit
    flask一些资料
    openldap sshkey & 用户自定义属性
    openldap复制
    openldap主机访问控制(基于用户组)
    openldap主机访问控制(基于ip)
    openldap自定义schema
    openldap主机访问控制(基于hostname)
    openldap权限sudo
  • 原文地址:https://www.cnblogs.com/lcan/p/9915283.html
Copyright © 2011-2022 走看看