码迷,mamicode.com
首页 > 其他好文 > 详细

福州大学第十一届程序设计

时间:2014-07-22 23:07:56      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   java   color   

现在写几个自己比赛RE到死的题目,吸取教训;

   

 

mamicode.com,码迷 Problem 2169 shadow

Accept: 109    Submit: 322
Time Limit: 1000 mSec    Memory Limit : 32768 KB

mamicode.com,码迷 Problem Description

YL是shadow国的国王,shadow国有N个城市。为了节省开支,shadow国只有N-1条道路,这N-1条道路使得N个城市连通。某一年,shadow国发生了叛乱,叛军占领了多个城市,王都岌岌可危。王都为编号为1的城市,除了王都外有K个城市有YL的军队。现在这K支军队要向王都进军,并且消灭沿途经过的城市中的叛军。现给出N个城市的道路情况以及城市的叛军数量,问总共需要消灭多少叛军?

mamicode.com,码迷 Input

第一行输入两个整数N,K,接下来输入N(1<=N<=100000)个整数Ai(0<=Ai<=10000),表示第i个城市的叛军数量。接下来输入K个大于等于1且小于等于N的整数,表示有军队的城市的编号。数据保证王都以及有军队的城市没有叛军。接下来输入N-1行,每行两个整数u、v,表示连接u和v的一条道路。每支军队只能沿着道路走,并且是其所在城市与王都之间的最短路线走。

mamicode.com,码迷 Output

输出一行一个整数表示消灭的叛军数量。

mamicode.com,码迷 Sample Input

4 2 0 3 0 0 3 4 1 2 2 3 2 4

mamicode.com,码迷 Sample Output

3

 比赛的是贡献了20多次RE+TLE,真无语,居然卡VECTOR,看RP,有些人的VECTORpassed,

数组邻接表模式:#include<stdio.h>

mamicode.com,码迷
#include<math.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=200010;
struct node{
int v,next;
}edg[maxn];
int head[2*maxn];
int tt;
int n,m,k;
int a[maxn];
int b[maxn],num[maxn];
int pre[maxn];
long long  ans;
void add(int u,int v)
{
      edg[tt].v=v;
      edg[tt].next=head[u];
      head[u]=tt++;
    } 

void dfs(int x)
{
      for (int i=head[x];i!=-1;i=edg[i].next){
             int y=edg[i].v;
             if (!b[y])
             {
             b[y]=1;
             pre[y]=x;
             dfs(y);
        }
    }
}

int main()
{
    while (scanf("%d%d",&n,&k)!=EOF)
    {
             memset(head,-1,sizeof(head));
              memset(pre,-1,sizeof(pre));
               memset(b,0,sizeof(b));
               tt=0;
                ans=0;
             for (int i=1;i<=n;i++) scanf("%d",&num[i]);
                 for (int i=1;i<=k;i++)
                  scanf("%d",&a[i]);
        for (int i=1;i<=n-1;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            add(x,y);
            add(y,x);
           }
          dfs(1);
            memset(b,0,sizeof(b));
        for (int i=1;i<=k;i++)
        {
            int x=a[i];
            while (x!=-1&&!b[x])
            {
                ans+=num[x];
                b[x]=1;
                x=pre[x];
            }
        }
        printf("%d\n",ans);
    }
    return 0;
mamicode.com,码迷

} 换做VECTOR就不可以,。。。。

对了,还有F题 mamicode.com,码迷 Problem 2171 防守阵地 II的树状数组写法,完爆那些线段树

树状数组真是好东西 

福州大学第十一届程序设计,码迷,mamicode.com

福州大学第十一届程序设计

标签:des   style   blog   http   java   color   

原文地址:http://www.cnblogs.com/forgot93/p/3700449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!