NC206697. 鱼不要过来啊!
描述
输入描述
第一行两个数字n,m表示n个房间,共m秒。
接下来m行每行三个数字。
表示该门只允许鱼通过
表示该门只允许DD通过
,
输出描述
一行n个数,之间用空格隔开
第i个数为1表示初始在第i号房间可以始终不和鱼见面,0表示不可以。
示例1
输入:
4 4 2 3 4 1 1 3 2 4 2 1 1 4
输出:
0 1 1 1
说明:
除了一开始就见面,其他情况DD有门就走便能逃过一劫!示例2
输入:
4 7 2 2 3 1 1 2 2 4 2 2 2 3 2 3 4 1 1 2 1 2 4
输出:
0 1 1 0
说明:
初始DD在2号或者3号,那么可以去3号房躲着。C++14(g++5.4) 解法, 执行用时: 32ms, 内存消耗: 2040K, 提交时间: 2020-07-22 15:23:12
#include <cstdio> using namespace std; const int max_n = 1e5 + 5; int n, m, t[max_n], a[max_n], b[max_n], T[max_n]; signed main() { // freopen("in", "r", stdin), freopen("out", "w", stdout); scanf("%d %d", &n, &m); for (int i = 1; i <= m; i++)scanf("%d %d %d", &t[i], &a[i], &b[i]); for (int i = 2; i <= n; i++)T[i] = -1; for (int i = 1; i <= m; i++)if (t[i] == 1 && T[a[i]] != -1 && T[b[i]] == -1)T[b[i]] = i; for (int i = m; i >= 1; i--)if (t[i] == 2 && T[a[i]] != -1 && T[b[i]] == -1 && T[a[i]] > i)T[a[i]] = -1; for (int i = 1; i <= n; i++)printf("%d ", T[i] == -1 ? 1 : 0); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 59ms, 内存消耗: 2268K, 提交时间: 2020-06-28 19:48:10
#include<bits/stdc++.h> using namespace std; int t[100005],a[100005],b[100005],T[100005]={0}; int main() { int i,n,m; scanf("%d%d",&n,&m); for(i=2;i<=n;i++)T[i]=1e9; for(i=1;i<=m;i++) { scanf("%d%d%d",&t[i],&a[i],&b[i]); if(t[i]==1&&T[a[i]]!=1e9&&T[b[i]]==1e9)T[b[i]]=i; } for(i=m;i>=1;i--)if(t[i]==2&&T[b[i]]==1e9&&T[a[i]]>i)T[a[i]]=1e9; for(i=1;i<=n;i++)printf("%d ",T[i]==1e9?1:0); }