2017 ICPC 乌鲁木齐
H:题目看错 背锅
#include <bits/stdc++.h>
#include <vector>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
const double EPS = 1.0e-9;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e4 + ;
const int maxm = ;
vector<pair<int, int> > p[];
int visit[maxn];
int ans[maxn];
int anser = ;
void dfs(int cur)
{
int len = p[cur].size();
if (len == )
{
ans[cur] = ;
}
for (int i = ; i < len; i++)
{
int to = p[cur][i].first;
int lenth = p[cur][i].second;
if (ans[to] != -)
{
ans[cur] = max(ans[cur], ans[to] + lenth);
}
else
{
dfs(to);
ans[cur] = max(ans[cur], ans[to] + lenth);
}
}
}
int main()
{
int t;
cin >> t;
while (t--)
{
anser = ;
mem(visit, );
mem(ans, -);
int n, m;
int from, to, lenth;
cin >> n >> m;
for (int i = ; i <= m; i++)
{
scanf("%d %d %d", &from, &to, &lenth);
visit[to] = ;
p[from].pb(make_pair(to, lenth));
}
for (int i = ; i <= n; i++)
{
if (visit[i] == )
{
//cout<<i<<endl;
dfs(i);
anser = max(anser, ans[i]);
}
}
cout << anser << endl;
for (int i = ; i <= n; i++)
{
p[i].clear();
}
}
}
G:每个test 后面没换行 背锅
#include <bits/stdc++.h>
#include <vector>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
const double EPS = 1.0e-9;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5 + ;
const int maxm = ;
int n, m, i, num[], tree[], l, r;
char s[maxn], t[maxn];
int slen, tlen, lencha;
string ch, ch1;
int lowbit(int x)
{
return x & (-x);
}
void update(int x, int p)
{
while (x <= n)
{
tree[x] += p;
x += lowbit(x);
}
return;
}
int sum(int k)
{
int ans = ;
while (k > )
{
ans += tree[k];
k -= lowbit(k);
}
return ans;
}
int ask(int l, int r)
{
return sum(r) - sum(l - );
}
int main()
{
/*cin>>n>>m;
for(i=1;i<=n;i++)
{
cin>>num[i];
update(i,num[i]);
}
for(i=1;i<=m;i++)
{
cin>>l>>r;
cout<<ask(l,r)<<endl;
}*/
int time;
cin >> time;
while (time--)
{
//mem(num, 0);
mem(tree, );
int now;
scanf("%d",&m);
scanf("%s", s + );
scanf("%s", t);
slen = strlen(s + );
tlen = strlen(t);
//cout<<slen<<" "<<tlen<<endl;
lencha = slen - tlen + ;
n = slen;
for (int i = ; i <= lencha; i++)
{
for (int j = ; j <= tlen; j++)
{
if (j == tlen)
{
num[i] = ;
update(i, num[i]);
break;
}
if (s[i + j] != t[j])
{
num[i] = ;
update(i, num[i]);
break;
} }
}
/*for (int i = 1; i <= slen; i++)
{
cout << num[i] << " ";
}
cout << endl;*/
for (int i = ; i <= m; i++)
{
cin >> ch;
if (ch[] == 'Q')
{
scanf("%d %d", &l, &r);
printf("%d\n", ask(l, r - tlen + ));
}
else if (ch[] == 'C')
{
int flag = ;
scanf("%d", &now);
cin >> ch1;
if (s[now] != ch1[])
{
flag = ;
}
s[now] = ch1[];
int from = max(, now - tlen + );
int to = min(lencha, now);
if (flag)
{
for (int j = from; j <= to; j++)
{
if (num[j] == )
{
num[j] = ;
update(j, -);
}
else
{
for (int k = ; k <= tlen; k++)
{
if (k == tlen)
{
num[j] = ;
update(j, );
break;
}
if (s[j + k] != t[k])
{
break;
}
}
}
}
}
/*for (int i = 1; i <= slen; i++)
{
cout << num[i] << " ";
}
cout << endl;*/
}
}
puts("");
}
return ;
}
J!!!!!!:最小费用最大流
每个城市拆成出点和入点,源点连西安和大连,汇点连上海,相当于求从西安到上海和从大连到上海最小距离之和,每个城市入点和出点之间连一条容量为1的边,但是注意,上海的容量必须是2,再根据给出的边,分别连接出点入点,存入相应花费,那么问题就可以转化成最小费用最大流了,如果流量不为2输出-1,否则输出最小花费。
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<map>
#include<queue>
#include<string>
using namespace std;
#define ll long long
const ll maxm = ;
const ll INF = 1e18 + ;
struct node
{
ll u, v, flow, cost, next;
}edge[maxm * ];
map<string, ll>p;
ll cnt, s, t, n, m, sum, FLOW;
ll head[maxm * ], dis[maxm * ], pre[maxm * ];
char a[maxm], b[maxm];
void init()
{
p.clear();
cnt = , s = , t = n * + , sum = , FLOW = ;
memset(head, -, sizeof(head));
}
void add(ll u, ll v, ll flow, ll cost)
{
edge[cnt].u = u, edge[cnt].v = v;
edge[cnt].flow = flow, edge[cnt].cost = cost;
edge[cnt].next = head[u], head[u] = cnt++;
edge[cnt].u = v, edge[cnt].v = u;
edge[cnt].flow = , edge[cnt].cost = -cost;
edge[cnt].next = head[v], head[v] = cnt++;
}
ll bfs()
{
queue<ll>q;
for (ll i = ;i <= t;i++) dis[i] = INF;
memset(pre, -, sizeof(pre));
dis[s] = , q.push(s);
ll rev = ;
while (!q.empty())
{
ll u = q.front();q.pop();
for (ll i = head[u];i != -;i = edge[i].next)
{
ll v = edge[i].v;
if (dis[v] > dis[u] + edge[i].cost&&edge[i].flow)
{
dis[v] = dis[u] + edge[i].cost;
pre[v] = i, q.push(v);
}
}
}
if (dis[t] == INF) return ;
return ;
}
ll MCMF()
{
ll ans = , minflow;
while (bfs())
{
minflow = INF;
for (ll i = pre[t];i != -;i = pre[edge[i].u])
minflow = min(minflow, edge[i].flow);
for (ll i = pre[t];i != -;i = pre[edge[i].u])
edge[i].flow -= minflow, edge[i ^ ].flow += minflow;
ans += dis[t] * minflow;
FLOW += minflow;
}
return ans;
}
int main()
{
ll i, j, k, T, c;
scanf("%lld", &T);
while (T--)
{
scanf("%lld", &n);
init();
ll nn = n * ;
for (i = ;i <= n;i++)
{
scanf("%s%s%lld", a, b, &c);
if (p[a] == )
{
p[a] = ++sum, k = ;
if (strcmp(a, "Shanghai") == ) k = ;
add(p[a], p[a] + nn, k, );
}
if (p[b] == )
{
p[b] = ++sum, k = ;
if (strcmp(b, "Shanghai") == ) k = ;
add(p[b], p[b] + nn, k, );
}
ll u = p[a], v = p[b];
add(u + nn, v, INF, c);
add(v + nn, u, INF, c);
}
ll u = p["Dalian"];
add(s, u, , );
u = p["Xian"];
add(s, u, , );
u = p["Shanghai"];
add(u + nn, t, , );
ll ans = MCMF();
if (FLOW == ) printf("%lld\n", ans);
else printf("-1\n");
}
return ;
}
2017 ICPC 乌鲁木齐的更多相关文章
- 2017 ICPC乌鲁木齐 A Coins 概率dp
Coins 题意:一开始所有n个硬币都是反面朝上的,每次必须拿k个来抛,抛的人足够聪明,问m次之后向上的硬币的期望. 首先说了这个足够聪明的意思,就是只要向反面的有k个就不会sb地去拿向正面的来抛,想 ...
- 【2017 ACM/ICPC 乌鲁木齐赛区网络赛环境测试赛 E】蒜头君的排序
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 莫队算法+树状数组. 区间增加1或减少1. 对逆序对的影响是固定的. (用冒泡排序变成升序的交换次数,就是逆序对的个数) [错的次数] 0 [ ...
- 2017 icpc 沈阳网络赛
cable cable cable Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2017 ICPC 广西邀请赛1004 Covering
Covering Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 2017 ICPC区域赛(西安站)--- J题 LOL(DP)
题目链接 problem description 5 friends play LOL together . Every one should BAN one character and PICK o ...
- Bumped! 2017 ICPC North American Qualifier Contest (分层建图+dijstra)
题目描述 Peter returned from the recently held ACM ICPC World finals only to find that his return flight ...
- 2017 ICPC网络赛(西安)--- Xor
题目连接 Problem There is a tree with n nodes. For each node, there is an integer value ai, (1≤ai≤1,000 ...
- 2017 ICPC西安区域赛 A - XOR (线段树并线性基)
链接:https://nanti.jisuanke.com/t/A1607 题面: Consider an array AA with n elements . Each of its eleme ...
- 2017 ICPC 广西邀请赛1005 CS Course
CS Course Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
随机推荐
- 问题 1014: [编程入门]阶乘求和python):(本地测试正确;但提交不对!!??)求教
问题 1014: [编程入门]阶乘求和 时间限制: 1Sec 内存限制: 128MB 提交: 27629 解决: 5450 题目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数 ...
- Vuex的认识和简单应用(一)
一.vuex是一个专为vue.js应用程序开发的状态管理模式. 应用场景:1.多个视图依赖于同一个状态2.来自不同视图的行为需要变更同一个状态此时,我们可以把组件的共享状态抽取出来,以一个全局单例模式 ...
- CTF—攻防练习之HTTP—暴力破解
攻击机:192.168.32.152 靶机:192.168.32.164 首先nmap,nikto -host ,dirb 扫描开放带端口,探测敏感文件,扫描目录 开放了21,22,80端口,看到一个 ...
- office web apps安装部署,配置https,负载均衡(四)安装office web apps相关软件
前提条件: 1.一台windows server 2008R2服务器,并且已经配置了域: 服务器连接域控制器的相关文档,请查看上一篇文章: office web apps安装部署,配置https,负载 ...
- Python爬虫学习==>第五章:爬虫常用库的安装
学习目的: 爬虫有请求库(request.selenium).解析库.存储库(MongoDB.Redis).工具库,此节学习安装常用库的安装 正式步骤 Step1:urllib和re库 这两个库在安装 ...
- python-Web-django-图片上传
建路由 创建方法 渲染页面 下载plupload插件.将插件放在项目根目录下的static下 写页面,引入js,写html 这个容器:放上传的图片 当上传后,需要ul里放3要素: 元素1:隐藏Inpu ...
- ASP.NET Core 入门笔记2,建立项目
1.建立项目 2.项目结构 1.项目结构说明 根目录/文件 说明 .vscode目录 VS Code项目配置目录,相当于.vs..idea文件夹 bin目录 编译输出目录 obj目录 编译配置与中间目 ...
- C#中StringBuilder类的使用总结
String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新 ...
- Leetcode之动态规划(DP)专题-413. 等差数列划分(Arithmetic Slices)
Leetcode之动态规划(DP)专题-413. 等差数列划分(Arithmetic Slices) 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列. 例如,以下数列为 ...
- xgboost的使用
1.首先导入包 import xgboost as xgb 2.使用以下的函数实现交叉验证训练xgboost. bst_cvl = xgb.cv(xgb_params, dtrain, num_boo ...