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

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

 Problem 2169 shadow

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

 Problem
Description

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

 Input

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

 Output

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

 Sample
Input


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

 Sample
Output


3

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

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


#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;

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

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

树状数组真是好东西

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

时间: 2024-10-14 00:55:42

福州大学第十一届程序设计的相关文章

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

Problem 2167 大王叫我来巡山呐 Problem 2168 防守阵地 I 直接前缀和预处理 Problem 2169 shadow  .. Problem 2170 花生的序列 dp Problem 2171 防守阵地 II 线段树搞搞 Problem 2172 巡了南山我巡北山 http://blog.csdn.net/my_acm_dream/article/details/44507371 好题 Problem 2173 Nostop 矩阵高速幂 Problem 2174 卷福的

福州大学第十一届程序设计竞赛菜鸟的题解

前几天去了两个比较牛的互联网公司面试,在sql这块都遇到问题了,哎,可惜呀,先把简单的梳理一下 成绩表 score 1.group by 使用 按某一个维度进行分组 例如: 求每个同学的总分 SELECT student,SUM(score) FROM score GROUP BY student 求每个同学的平均分 SELECT student,AVG(score) FROM score GROUP BY student 也可以按照 班级,课程 来求 2.having 与 where的区别 h

补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)

补番计划 Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 8   Accepted Submission(s) : 1 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 阿聪是一个日漫狂魔.暑假在家的时候,他有12小时在补番,12小时在睡

2015.10.19 福州大学第九届程序设计竞赛

FZU 2086 餐厅点餐 枚举 练的时候以为是dp---(事实上这场只做了10来分钟---就愉快地滚去吃饭了---) 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 int A,B,C,D,E; 7 int a[15];//汤 8 int b[15];//饭 9 int c[15];//面 1

最长子串(长沙理工大学第十一届程序设计竞赛 离线 做了n天.....崩溃了)

最长子串 Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Submission(s) : 27   Accepted Submission(s) : 4 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 小E最近开始研究数列,于是小J就给他出了一道题目:给你一个长度为n

北京信息科技大学第十一届程序设计竞赛(重现赛)H

H andy和购物 题目链接:https://ac.nowcoder.com/acm/contest/940/H 题目描述 andy要去市场买n件货物,每件货物的价格为ai.商家为了吸引顾客,给每个买N件货物的顾客一个折扣清单,清单上有N个小于1的小数bj表示折扣.对于每个折扣bj,由用户自行决定用它使哪个货物的价格变成bj * ai,并且只能用一次. andy想让你帮他算一下他最少的花费. 输入描述: 先输入一个正整数t,代表样例的组数.(1≤t≤10) 对于每个样例: 第一行,输入一个正整数

12.28西南民族大学第十一届程序设计竞赛(同步赛)

A了9题 不太行 虽然前期速度还行,由于有道poj原题写过直接粘了,但中期由于被B卡了,心态有点炸.后面也做不太动. 来补两道题. B题: 题意:求最短的让所有字符都至少出现一次的字符串的长度 https://ac.nowcoder.com/acm/contest/3570/B 比赛里一直想的假算法,什么维护每个字符第一次出现,最后一次出现的位置,那答案在中间呢? 枚举长度,端点,check,TLE,真敢写.真的sb,太假了. 然后这题赛后看了别人代码,发现类似个滑动窗口,动态的去维护呀,虽然我

Android应用基础学习记录

福州大学第十一届程序设计竞赛 Contest Finished! Tag Pro.ID Problem Title Ratio(AC/Submit) 1 大王叫我来巡山呐 80.31%(261/325) 2 防守阵地 I 23.48%(193/822) 3 shadow 13.23%(97/733) 4 花生的序列 12.07%(21/174) 5 防守阵地 II 14.98%(68/454)   6 巡了南山我巡北山 0.00%(0/45) 7 Nostop 20.79%(21/101)  

矩阵操作来处理图

总结: 此类题目有一个明显的特点,是n个点或者n*n的矩阵,否则无法做矩阵运算 点数不能太大,因为矩阵操作的复杂度是O(N^3)的,所以大概最多只能有100个点 结果和移动次数有关,且一次只能移动一个点(经过一条边) Codeforces Round #236 (Div. 2)--Strictly Positive Matrix 题意: 给一个n*n的矩阵a,保证a[i][i]>0,所有元素非负 若干次幂之后,问时候能保证矩阵中不含有零 分析: 首先说明一点,矩阵的数值是没有多少关系的,只有零和