結果
問題 | No.416 旅行会社 |
ユーザー | wakannyaai |
提出日時 | 2020-02-09 15:42:11 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 938 ms / 4,000 ms |
コード長 | 7,405 bytes |
コンパイル時間 | 2,597 ms |
コンパイル使用メモリ | 198,964 KB |
実行使用メモリ | 41,004 KB |
最終ジャッジ日時 | 2024-05-08 15:47:11 |
合計ジャッジ時間 | 12,873 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 383 ms
35,984 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 4 ms
5,376 KB |
testcase_08 | AC | 10 ms
5,376 KB |
testcase_09 | AC | 47 ms
6,784 KB |
testcase_10 | AC | 438 ms
35,988 KB |
testcase_11 | AC | 432 ms
39,056 KB |
testcase_12 | AC | 433 ms
39,056 KB |
testcase_13 | AC | 388 ms
39,056 KB |
testcase_14 | AC | 911 ms
37,936 KB |
testcase_15 | AC | 909 ms
38,832 KB |
testcase_16 | AC | 927 ms
41,004 KB |
testcase_17 | AC | 938 ms
38,700 KB |
testcase_18 | AC | 904 ms
38,320 KB |
testcase_19 | AC | 720 ms
40,584 KB |
testcase_20 | AC | 726 ms
38,020 KB |
ソースコード
/*やったぜ。 投稿者:変態糞土方 (8月16日(水)07時14分22秒) 昨日の8月15日にいつもの浮浪者のおっさん(60歳)と先日メールくれた汚れ好きの土方のにいちゃん (45歳)とわし(53歳)の3人で県北にある川の土手の下で盛りあったぜ。 今日は明日が休みなんでコンビニで酒とつまみを買ってから滅多に人が来ない所なんで、 そこでしこたま酒を飲んでからやりはじめたんや。 3人でちんぽ舐めあいながら地下足袋だけになり持って来たいちぢく浣腸を3本ずつ入れあった。 しばらくしたら、けつの穴がひくひくして来るし、糞が出口を求めて腹の中でぐるぐるしている。 浮浪者のおっさんにけつの穴をなめさせながら、兄ちゃんのけつの穴を舐めてたら、 先に兄ちゃんがわしの口に糞をドバーっと出して来た。 それと同時におっさんもわしも糞を出したんや。もう顔中、糞まみれや、 3人で出した糞を手で掬いながらお互いの体にぬりあったり、 糞まみれのちんぽを舐めあって小便で浣腸したりした。ああ~~たまらねえぜ。 しばらくやりまくってから又浣腸をしあうともう気が狂う程気持ちええんじゃ。 浮浪者のおっさんのけつの穴にわしのちんぽを突うずるっ込んでやると けつの穴が糞と小便でずるずるして気持ちが良い。 にいちゃんもおっさんの口にちんぽ突っ込んで腰をつかって居る。 糞まみれのおっさんのちんぽを掻きながら、思い切り射精したんや。 それからは、もうめちゃくちゃにおっさんと兄ちゃんの糞ちんぽを舐めあい、 糞を塗りあい、二回も男汁を出した。もう一度やりたいぜ。 やはり大勢で糞まみれになると最高やで。こんな、変態親父と糞あそびしないか。 ああ~~早く糞まみれになろうぜ。 岡山の県北であえる奴なら最高や。わしは163*90*53,おっさんは165*75*60、や 糞まみれでやりたいやつ、至急、メールくれや。 土方姿のまま浣腸して、糞だらけでやろうや。*/ #include "bits/stdc++.h" #include <unordered_set> #define rep(i,n) for(ll i = 0; i < n; i++) typedef long long ll; typedef unsigned long long ull; using namespace std; #define vll vector<vector<long long>> #define vl vector<long long> #define vi vector<int> #define vii vector<vector<int>> #define pb push_back #define pf push_front #define ld long double #define Sort(a) sort(a.begin(),a.end()) #define cSort(a,cmp) sort(a.begin(),a.end(),cmp) #define reSort(a) sort(a.rbegin(), a.rend()) static const ll llMAX = numeric_limits<long long>::max(); static const int intMAX = numeric_limits<int>::max(); static const ll llMIN = numeric_limits<long long>::min(); static const int intMIN = numeric_limits<int>::min(); static const ll d_5 = 100000; static const ll d9_7 = 1000000007; static const ll d_9 = 1000000000; static const double PI=3.14159265358979323846; //<<std::setprecision(30) template<class T> void Printvector(std::vector<T> a){ int size = a.size(); rep(i,size){ cout<<a[i]<<" "; } cout<<endl; } template<class T> void Printvector(std::vector<std::vector<T>> a){ int size = a.size(); rep(i,size){ int size2=a[i].size(); rep(j,size2){ cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl; } ll digitpower(ll a,ll b){//aのb乗を計算 if(b==1){ return a; }else if(b==0){ return 1; } if(b%2==1){ ll tmp = digitpower(a,(b-1)/2); tmp%=d9_7; tmp*=tmp; tmp%=d9_7; tmp*=a; return (tmp)%d9_7; }else{ ll tmp = digitpower(a,(b)/2); tmp%=d9_7; tmp*=tmp; tmp%=d9_7; return (tmp)%d9_7; } } unordered_map<ll,ll> prime_factor(int64_t n) { unordered_map<ll,ll> ret; for(int64_t i = 2; i * i <= n; i++) { while(n % i == 0) { ret[i]++; n /= i; } } if(n != 1) ret[n] = 1; return ret; } /*struct datas{ int num; int index; }; bool cmp(const datas &a, const datas &b) { return a.num < b.num; }*/ template<class T> vector<T> getaccum(vector<T> a){ int size=a.size(); vector<T> ans(size); ans[0]=a[0]; for(int i=0;i<size-1;i++){ ans[i+1]=ans[i]+a[i+1]; ans[i+1]%=d9_7; } return ans; } class Marge_unionfind{//uniteするごとに集合に大して処理する マージテク private: int n; unordered_map<int,unordered_set<int>> nums; vector<int> roots; public: //constructor Marge_unionfind(int size){ roots=vector<int> (size);//どのグループに所属しているか for(int i=0;i<size;i++){ nums.insert({i,{i}}); roots[i]=i; } n=size; } void unite(int a,int b){//引数は要素 int root1=getroot(a); int root2 = getroot(b); if(root1==root2){ return; } if(nums[root1].size()<nums[root2].size()){ //root2に併合する for(auto i:nums[root1]){ roots[i]=root2; nums[root2].insert(i); } nums[root1].clear();//用済みだあ }else{ //root1に併合する for(auto i:nums[root2]){ roots[i]=root1; nums[root1].insert(i); } nums[root2].clear();//用済みだあ } return; } int getroot(int index){ return roots[index]; } int &operator[](int input){ // [] 演算子の多重定義 return roots[input]; } int kindsize(){ int ret=0; for(int i=0;i<n;i++){ if(nums[i].size()!=0){ ret++; } } return ret; } int size(){ return n; } unordered_set<int> elements(int num){//numの所属する集合を返す int tmproot=getroot(num); return nums[tmproot]; } }; int main(void){ ll n,m,q; cin>>n>>m>>q; vi a(m),b(m),c(q),d(q); set<pair<int,int>> bris; rep(i,m){ cin>>a[i]>>b[i]; a[i]--;b[i]--; bris.insert({a[i],b[i]}); } rep(i,q){ cin>>c[i]>>d[i]; c[i]--; d[i]--; bris.erase({c[i],d[i]}); } //最終的に残っているものをまず全て見る Marge_unionfind uni(n); for(auto i:bris){ uni.unite(i.first,i.second); } vi anss(n,0); unordered_set<int> cannot; rep(i,n-1){ if(uni[i+1]==uni[0]){ anss[i+1]=-1;//最後まで移動できる }else{ cannot.insert(i+1);//破壊されたところ } } for(int i=q-1;i>=0;i--){ /*rep(j,n){ cout<<uni[j]<<" "; }*/ // cout<<"unied"<<endl; int num1=c[i];//橋の番号の一つ目 int num2=d[i];//2つ目 int now0root=uni[0]; if(uni[num1]==uni[num2]){ //既にuniteされている // cout<<"already"<<endl; continue; } if(uni[num1]==now0root){ //cout<<num1<<" "<<uni[num1]<<endl; unordered_set<int> tmp=uni.elements(num2); for(auto j:tmp){ // cout<<"anss "<<j<<" "; anss[j]=i+1; } // cout<<endl; }else if(uni[num2]==now0root){ // cout<<num2<<" "<<uni[num2]<<endl; unordered_set<int> tmp=uni.elements(num1); for(auto j:tmp){ //cout<<"anss "<<j<<" "; anss[j]=i+1; } // cout<<endl; } //Printvector(anss); //cout<<"anssed"<<endl; uni.unite(c[i],d[i]); } rep(i,n-1){ cout<<anss[i+1]<<endl; } return 0; }