欲买桂花同载酒终不似少年游 2018-10-27 12:04 采纳率: 0%
浏览 423

zoj1178问一下各位哪里有问题为什么一直WA

请问各位大佬,我这为什么一直WA?
所有的情况我都试了 没问题啊
#include
#include
#include
int main()
{
int i,j,n;
int page;
while(scanf("%d",&n)&&n)
{
page = (n+3)/4;
printf("Printing order for %d pages:\n",n);
for(i=page*4,j=1;i>j+2;i=i-2,j=j+2)
{
if(!(i>n&&j>n))
{
printf("Sheet %d, front:",(j+1)/2);
(i>n)?printf(" Blank,"):printf(" %d,",i);
(j>n)?printf(" Blank"):printf(" %d",j);
printf("\n");
}
if(!(j+1>n&&i-1>n))
{
printf("Sheet %d, back:",(j+1)/2);
(j+1>n)?printf(" Blank,"):printf(" %d,",j+1);
(i-1>n)?printf(" Blank"):printf(" %d",i-1);
printf("\n");
}
}
}
return 0;
}


  • 写回答

3条回答 默认 最新

  • devmiao 2018-10-27 12:05
    关注
     #include <iostream>
    #include <queue>
    #include <vector>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    
    typedef long long ll;
    const int N = 100000 + 100;
    const int E = 200000 + 100;
    const ll INF = ((ll)1) << 61;
    
    struct edge_t 
    {
        int v;
        int next;
        int c, d;
    }edge[E];
    
    int head[N], tot = 0;
    void add_edge(int u, int v, int d, int c)
    {
        edge[tot].d = d; edge[tot].c = c;
        edge[tot].v = v; edge[tot].next = head[u]; head[u] = tot++;
    }
    struct node
    {
        int u;
        ll c,d;
        node (){}
        node(int uu, int cc, int dd)
        {
            u=uu;
            c=cc;
            d=dd;
        }
        friend bool operator < (const node &a, const node &b)
        {
            if(a.d==b.d)return a.c>b.c;
            return a.d>b.d;
        }
    };
    
    bool vis[N];
    node dis[N];
    priority_queue<node>q;
    void dijkstra()
    {
        dis[0].c = 0;
        dis[0].d = 0;
        q.push(dis[0]);
        while (!q.empty())
        {
            int u = q.top().u; q.pop();
            if(vis[u])continue;
            vis[u] = 1;
            for (int i = head[u]; ~i; i = edge[i].next)if (!vis[edge[i].v])
            {
                int v = edge[i].v;
                if (dis[u].d + edge[i].d < dis[v].d)
                {
                    dis[v].d = dis[u].d + edge[i].d;
                    dis[v].c = edge[i].c;
                    q.push(dis[v]);
                }
                else if (dis[u].d + edge[i].d == dis[v].d&& edge[i].c < dis[v].c)
                {
                    dis[v].d = dis[u].d + edge[i].d;
                    dis[v].c = edge[i].c;
                    q.push(dis[v]);
                }
            }
        }
    }
    void init(int n)
    {
        for (int i = 0; i < n; ++i)
        {
            dis[i].u = i;
            dis[i].c = INF;
            dis[i].d = INF;
        }
        memset(vis, 0, sizeof vis);
        tot = 0;
        memset(head, -1, sizeof head);
        memset(edge, 0, sizeof edge);
    }
    int main()
    {
        int T;
        scanf("%d", &T);
        while (T--)
        {
            int n, m;
            scanf("%d%d", &n, &m);
            init(n);
            for (int i = 0; i < m; ++i)
            {
                int u, v, d, c;
                scanf("%d%d%d%d", &u, &v, &d, &c);
                add_edge(u, v, d, c);
                add_edge(v, u, d, c);
            }
            dijkstra();
            ll sum_c = 0, sum_d = 0;
            for(int i=0 ; i<n ; ++i)
            {
                sum_c+=dis[i].c;
                sum_d+=dis[i].d;
            }
            printf("%lld %lld\n", sum_d, sum_c);
        }
        return 0;
    }
    
    
    评论

报告相同问题?